Ich benutze das Befehlsmuster schon seit einiger Zeit, bin mir aber nie sicher, wie viel Logik ich tatsächlich in die Execute
Methode einbauen kann .
Meine aktuelle Implementierung des Befehlsmusters sieht folgendermaßen aus:
public abstract class Command
{
public static event EventHandler Completed = delegate { };
public bool Success { get; private set; }
public Exception Exception {get; private set; }
public abstract bool Execute();
protected bool OnCompleted(bool success, Exception ex = null)
{
Success = success;
Exception = ex;
Completed(this, EventArgs.Empty)
return success;
}
}
und das sind die Fragen, die ich mir stelle (und in meinen Befehlen übe):
- Ist es in Ordnung, Nachrichtenfelder anzuzeigen oder Dialoge zum Öffnen von Dateien usw. anzuzeigen?
- Ist es in Ordnung, Eigenschaften eines Objekts festzulegen?
- Kann ein Befehl Geschäftslogik enthalten?
- Kann ein Befehl die GUI-Steuerelemente trotzdem ändern?
- Zu welchen Ebenenbefehlen gehören? Ansicht oder Datenschicht? Kann ich Befehle in beiden Ebenen haben?
- Kann ein Befehl all das tun, was vorher in der war
button1_Click
? - Sollte ein Befehl von Unit-Testable?
- Kann ein Befehl als zu sehen Benutzer , dass Marken die APIs verwenden und baut die letzte Schicht einer Anwendung und auch die letzte Mittel Ausnahmen zu fangen?
- Können Befehle auch per Code ausgeführt werden (Befehl ruft API auf, API wird ausgeführt und schließlich ruft eine andere API einen Befehl auf) oder kann nur der Benutzer ihn aufrufen und die APIs dürfen nichts über ihre Existenz wissen?
- Gibt es einen Platz für Befehle in MVC oder MVVC oder einem anderen Entwurfsmuster mit einer Steuerung? Sie scheinen sich gegenseitig auszuschließen. Was ist vorzuziehen?
Es gibt viele Tutorials, die zeigen, wie das Befehlsmuster implementiert wird, aber keines beschreibt tatsächlich, wie es in einer echten Wold-Anwendung angewendet wird.