Ist es allgemein akzeptabel, einem Besucher zu erlauben, den Status des Empfängers zu ändern, oder sollte das stattdessen ein Befehlsmuster sein?Befehlsmuster vs. Besuchermuster
Antwort
Der Zweck des Besuchermusters besteht darin, neue Operationen zu einer Klassenhierarchie hinzuzufügen, ohne diese Hierarchie zu modifizieren. Ich habe noch nie jemanden gesehen, der vorschlägt, dass nur Leseoperationen akzeptabel sind. Die einzige Einschränkung besteht darin, dass die hinzugefügten Operationen nur die öffentliche Schnittstelle der Klassenhierarchie verwenden sollten.
Ich glaube nicht, dass Sie eine pauschale Aussage machen können, ob es gut oder schlecht ist, den Zustand von irgendetwas zu ändern. Ich würde denken, dass es in Ordnung ist, die Zustände zu ändern, solange es die Besuchslogik selbst nicht beeinflusst. Sie könnten beispielsweise einen Besucher schreiben, der alle Dateien unter der Ordnerstruktur besucht und den Dateinamen in Großbuchstaben umwandelt.
Microsofts Beispiel eines Besuchers, der den Empfänger ändert, ist ExpressionVisitor. Der Zweck der ExpressionVisitor-Klasse besteht darin, eine Ausdrucksbaumstruktur zu ändern. Also denke ich, Microsoft hält es zumindest für akzeptabel.
Microsoft ist nicht immer die beste Anleitung, was richtig und falsch ist: http://ayende.com/blog/35841/review-microsoft-n-layer-app-sample-part-xndash-architecture- for-the-space-age – jason
Die Standardinterpretation, wenn jemand sagt "Autorität X denkt, Y ist akzeptabel" ist, dass Sie Y durch Berufung auf Autorität X unterstützen. * argumentum ad verecundiam *. – jason
@Jason Sicher werde ich Microsoft als Autorität betrachten. Ich sage, hier ist ein Beispiel, dass diese Autorität dieses Muster akzeptiert. Aber sage ich, dass sie der "beste Führer" sind? Nein . Ich überlasse es dem Fragesteller zu entscheiden, ob sie Recht haben. –
Jedes Muster hat seine eigenen Vor-, Nachteile und Anwendungsfälle.
können Sie verwenden Command
Muster
Entkoppeln der Aufrufer & Empfänger des Befehls
Implementieren Rückruf Mechanismus
Undo und Redo Implementieren Funktionalität
Pflegen Sie eine Geschichte von Befehlen
Verwenden Visitor
Muster in folgenden Szenarien:
- ähnliche Operationen auf Objekte verschiedenen Typen durchgeführt werden müssen, um in einer Struktur gruppierten
- Sie müssen viele verschiedene und nicht zusammenhängende Operationen ausführen. Er trennt Betrieb von Objekten Struktur
- Neue Operationen haben ohne Änderung hinzugefügt werden in Objektstruktur
Related posts:
Es gibt auf jeden Fall Fälle, in denen man makieren kann Die Aussage, dass das Ändern des Zustands eine gute oder schlechte Sache ist. Es wird erwartet, dass das Besuchermuster so verwendet wird, dass eine Zustandsänderung möglich und sogar wahrscheinlich ist. Während bei dem Beobachtermuster der Beobachter den Zustand nicht ändern sollte. –
Was ist mit einem Benutzer, Ereignis zum Kommentieren, Punisher Listener, der Benutzer verbieten würde, nachdem er einige gewalttätige Worte gesagt hat? :-) –