2009-03-09 18 views
0

Ich arbeite an einer MVC/MVP GUI zum Bearbeiten eines Dokuments. Das Dokument hat eine Baumstruktur, wobei einige Knoten Text, andere Bilder darstellen. Das App-Modell enthält auch einen Befehlsstapel mit Befehlen, die direkt auf dem Modell ausgeführt werden.Welche Muster gibt es zum Erstellen von Ansichten und Controllern in einer MVC- oder MVP-App?

Da verschiedene Knoten radikal unterschiedliche Steuerelemente haben, plane ich die Implementierung einzelner MVC/MVP Triaden für jeden Knoten. Wo ich in Schwierigkeiten gerate, ist die Synchronisierung der Erstellung und Zerstörung der Peer-V- und -C-Komponenten.

Meine Ideen:
- für „childAdded“ Typ Ereignisse auf jedem Knoten hören, und dann Peers auf diese Ereignisse erstellen basierend
- eine Fabrik für die Erstellung von Knoten im Modell verwenden und diese Fabrik auch die Peers erstellen

Was sind einige gebräuchliche Muster oder Best Practices für die dynamische Ansicht/Controller-Generierung?

Antwort

1

Ich empfehle an dieser site

Was Ihre konkrete Frage an einige der UI-Patterns suchen würde ich die folgende

Die Form tun, um die Knoten Anzeige würde eine INodeView Schnittstelle

Eine Methode implementieren der INodeTreeForm-Schnittstelle wäre die Möglichkeit, einen einzelnen Knoten hinzuzufügen. Es würde eine Node-Klasse übergeben, die im NodeTreeScreen-Objekt erstellt wurde. Es wird zwei Schlüsseleigenschaften geben. Der erste ist der Schlüssel des Knotens und der zweite ist der Knotentyp.

Sie würden den Knoten so hinzufügen, dass auf dem Steuerelement ein Feld mit dem Schlüssel vorhanden ist.

Zusammen mit INodeTreeForm Interface haben Sie eine INodeView-Schnittstelle. Dies würde den Ansichtsbereich oder das neue Formular abdecken, das Sie ebenfalls wechseln.

Wenn Sie auf den Knoten klicken, übergibt er den Schlüssel an NodeTreeScreen, der nach dem Typ des Knotens sucht. Es verfügt über eine Sammlung von INodeView-Objekten. Eine der Eigenschaften von INodeView wird sein, welcher Knotentyp es ist.

Sie rufen die richtige INodeView ab. Sie schließen den aktuellen INodeView, setzen den aktuellen INodeView auf den von Ihnen abgerufenen, übergeben ihm den Knoten und sagen ihm, dass er selbst angezeigt wird.

Sie haben die Wahl, was INodeView sprechen wird. Sie können für jeden der verschiedenen Typen ein Formular/Steuerelement registriert haben. Zum Beispiel ein INodeViewText, INodeViewImage, etc. Oder nur ein Omnibus INodeViewForm und das Objekt, das INodeView implementiert, kümmert sich um die eigentliche Zeichnung.

Abhängig von Ihrem GUI-Toolkit könnte dies bedeuten, dass ein Formular viele verschiedene Schnittstellen implementieren könnte.

Zum Hinzufügen, Löschen und Erstellen von Knoten würde dies über die Interaktion zwischen dem Formular, das INodeTreeForm implementiert, und NodeTreeScreen erfolgen. Dazu werden unter anderem die Befehle ausgeführt, die Sie bereits zum Ändern des Modells erstellt haben.

Durch die Implementierung aller Dinge hinter einer Schnittstelle können Sie die Implementierung ändern, ohne den Rest der Software zu vermasseln. Das Objekt, das die verschiedenen Schnittstellen implementiert, kann sich ändern, ohne die anderen Objekte zu beeinträchtigen, solange sie die Schnittstellen weiterhin korrekt implementieren.

Dies ist eine Variante von Passive View auf der Website von Martin Fowler.