Frage

Mein Verständnis des Command-Musters ist, dass man einfach 1 virtuelle Methode hat ‚execute ()‘, und alle Abhängigkeiten, dass eine Implementierung in der Umsetzung im Konstruktor oder durch Setter Injektion setzen könnte (wie besprochen here ).

Doch in der WPF-Implementierung des Musters, bemerkte ich, sie geben ein generic Argument an die execute () Funktion (erklärt hier ).

Dies scheint eine Verschmutzung der Schnittstelle zu mir, was die Motivation, ein generic Parameter an die execute () Funktion hinzuzufügen gewesen wäre?

War es hilfreich?

Lösung

Es ist für die Datenbindung. Wenn Sie den Befehl für jedes Objekt in einer Liste zu binden, zum Beispiel wird die aktuelle Instanz des Verfahren so ausgeführt werden gesendet, dass Sie sich nicht selbst den Überblick über die aktuelle Instanz.

sagte, dass, ich glaube nicht, dass der WPF Befehl Begriff ist eine Implementierung des Befehlsmusters, sie nur Aktien Terminologie.

Andere Tipps

Die kanonische Befehlsmuster ist in der Regel mit schön in sich geschlossene Befehle dargestellt. In, dass Informationen über den Befehl benötigt werden, innerhalb der Command-Objekt-Instanz (in der Regel über eine parametrisierte Konstruktor) gebunkert.

Doch in einigen Fällen müssen die Parameter für nicht Befehlserstellungszeit verfügbar sein (sind dafür bekannt, nur zur Laufzeit) ausführen kann. z.B. Stellen Sie sich einen SignOutCommand( username ). Der Benutzername wird bestimmt, wenn der Benutzer klickt auf die Schaltfläche SignOut nach in der ersten Unterzeichnung.

So werden Benutzername in als generischen Parameter zu Command.Execute() geben; Jeder Befehl ist frei, seine Eingabe zu definieren und entsprechend z.B. gegossen ein beliebiger Befehl 5 Parameter als Objekt benötigt, kann [].

Der Grund für diesen Parameter ist die Trennung zwischen dem Schöpfer des Befehls - die wissen, was Befehl Bedarf ausgeführt werden, und die Anrufer -. wer weiß, , wenn ein Befehl ausgeführt werden müssen

In bestimmten Befehlen der Informationen einigen, dass für die Ausführung erforderlich ist, um den Schöpfer nicht zur Verfügung. Der Anrufer die Füllungen in den Rohling durch einen Parameter übergeben auszuführen. Ein Beispiel: Der Schöpfer schafft einen Befehl, der eine Liste der Datensätze nach einigen Kriterien filtert. Die Liste ist auf der Schaffung Website nicht verfügbar, da es viele Arten von Listen in der Anwendung ist.

Der Anrufer wird angegeben, welche Liste Bedürfnisse, indem als Parameter an gefiltert werden.

Wir verwenden ein wenig verändert Befehlsmuster, das so zusätzlich Methode Execute wir haben zwei Eigenschaften Anforderung und Antwort und wir parametrisieren sie Polymorphismus.

Was ist los mit:

public class DeleteCommand : BaseCommand
{
  private Dictionary<string, object> parameters;

  public DeleteCommand(Dictionary<string, object> parameters)
  {
     this.parameters = parameters;
  }

  public void Execute()
  {
     var person = (Person)parameters["Person"];
     var salary = System.Convert.ToDouble(parameters["Salary"]);

     // etc.
  }
}

Nun, wenn Sie einen Controller haben, dass ansammelt Parameter Sie diejenigen, die durch auf Ihre Befehle weitergeben können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top