Est-il généralement acceptable de permettre à un visiteur de modifier l'état du récepteur ou devrait-il s'agir d'un modèle de commande?Motif de commande et modèle de visiteur
Répondre
Le but du modèle de visiteur est de permettre l'ajout de nouvelles opérations à une hiérarchie de classes sans modification de cette hiérarchie. Je n'ai jamais vu quelqu'un suggérer que seules les opérations en lecture seule sont acceptables. La seule limitation est que les opérations ajoutées ne doivent utiliser que l'interface publique de la hiérarchie de classe.
Je ne pense pas que vous puissiez faire une déclaration générale, qu'il soit bon ou mauvais de modifier l'état de n'importe quoi. Je pense que c'est correct de modifier les états tant que cela n'affecte pas la logique de visite elle-même. Par exemple, vous pouvez écrire un visiteur qui visite tous les fichiers sous la structure de dossiers et renomme le nom de fichier en majuscules.
L'exemple Microsoft d'un visiteur modifiant le récepteur est le ExpressionVisitor. Le but de la classe ExpressionVisitor est de modifier un arbre d'expression. Donc je suppose que Microsoft pense au moins que c'est acceptable.
Microsoft n'est pas toujours le meilleur guide quant à ce qui est bien et mal: http://ayende.com/blog/35841/review-microsoft-n-layer-app-sample-part-xndash-architecture- for-the-space-age – jason
L'interprétation standard quand quelqu'un dit "l'autorité X pense que Y est acceptable" est que vous endossez Y en faisant appel à l'autorité X. cf. * argumentum ad verecundiam *. – jason
@Jason Bien sûr, je considérerai Microsoft comme une autorité. Je dis qu'il y a un exemple où cette autorité trouve ce modèle acceptable. Mais je dis qu'ils sont le "meilleur guide"? Non . Je laisse au demandeur le soin de décider s'il a raison. –
Chaque motif possède ses propres avantages, inconvénients et cas d'utilisation.
Vous pouvez utiliser motif Command
à
Découpler le invoker & récepteur de commande
Mettre en oeuvre rappel mécanisme
Mettre en oeuvre annuler et rétablir la fonctionnalité
Maintenir une histoire des commandes
Utiliser modèle Visitor
dans les scénarios ci-dessous:
- Des opérations similaires doivent être effectuées sur des objets de différents types regroupés dans une structure
- Vous devez exécuter de nombreuses opérations distinctes et sans rapport. Il sépare Opération des objets Structure
- nouvelles opérations doivent être ajoutés sans changement dans la structure de l'objet
Related posts:
- 1. Modèle de visiteur et récursivité
- 2. Motif de commande: client et invocateur
- 3. modèle de visiteur contre conditions?
- 4. Motif de commande et conception des paramètres
- 5. Modèle de conception de visiteur dans OCaml
- 6. DTO/Motif Commande Question
- 7. Modèle de visiteur + principe ouvert/fermé
- 8. Modèle de visiteur générique dans Java
- 9. Motif de commande sans fonctions virtuelles (C++)
- 10. Modèle de visiteur, enlever le besoin de lancer
- 11. Motif de fournisseur et DefaultProvider
- 12. MVC et le modèle de commande
- 13. EF et motif de conception
- 14. Implémentation du modèle de visiteur sur les objets agrégés
- 15. Utilisation du modèle de visiteur pour un interpréteur en C++
- 16. Modèle de commande wpf
- 17. Modèle de commande récurrente
- 18. Différence entre la répartition double et le modèle de visiteur en Java et en C++
- 19. C# héritage motif-modèle question
- 20. validation de validation de modèle de rails et commande
- 21. Implémentation du modèle de commande
- 22. CheckBox pour Silverlight Behaviors commande MVVM Motif
- 23. Motif de correspondance et Regex en Perl
- 24. Commande de console Windows: recherchez un motif dans un texte?
- 25. une chaîne dans « > et</ motif
- 26. Motif de commande particulière de la division et la multiplication en C++
- 27. Exemple de modèle de commande WPF personnalisé
- 28. Moq et Motif de commande. Je suis en difficulté pouvez-vous aider?
- 29. (initialisation statique/instanciation de modèle) problèmes avec motif d'usine
- 30. Motif de conception Builder
Il y a certainement des cas où l'on peut faire e l'affirmation que changer d'état est une bonne ou une mauvaise chose. Le modèle de visiteur devrait être utilisé de telle manière qu'un changement d'état est possible et même probable. Alors qu'avec le modèle d'observateur, l'observateur ne devrait pas changer d'état. –
qu'en est-il un utilisateur, un événement pour commenter, un auditeur punisher qui interdirait l'utilisateur après avoir dit quelques mots violents? :-) –