Frage

Ich arbeite an einer MVC/MVP -GUI für die Bearbeitung eines Dokuments. Das Dokument verfügt über eine Baumstruktur mit einigen Knoten, die Text darstellen, andere Bilder. Das App -Modell enthält außerdem einen Befehlsstapel, wobei Befehle direkt auf dem Modell betrieben werden.

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 Schöpfung und Zerstörung der Peer V- und C -Komponenten.

Meine Ideen:
- Hören Sie jeden Knoten für "Kindadded" -Typ -Ereignisse an und erstellen Sie dann Kollegen basierend auf diesen Ereignissen
- Verwenden Sie eine Fabrik zum Erstellen von Knoten im Modell und lassen Sie diese Fabrik auch die Kollegen erstellen

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

War es hilfreich?

Lösung

Ich empfehle, einige der UI -Muster dabei zu betrachten Seite? ˅

Wie für Ihre spezifische Frage würde ich Folgendes tun

Das Formular mit den Knoten würde eine InodeView -Schnittstelle implementieren

Eine Methode der Inodetreeform -Schnittstelle wäre die Fähigkeit, einen einzelnen Knoten hinzuzufügen. Es würde eine Knotenklasse übergeben, die im Nodetrecreen -Objekt erstellt wurde. Es wird zwei wichtige Eigenschaften geben. Der erste ist der Schlüssel des Knotens, und der zweite ist der Knotentyp.

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

Zusammen mit der Inodetreform -Schnittstelle haben Sie eine InodeView -Schnittstelle. Dies würde den Ansichtsbereich oder das neue Formular abdecken, das Sie auch wechseln werden.

Wenn Sie auf den Knoten klicken, übergibt er die Taste an Nodetreescreen, in der sich die Art von Knoten neigt. Es verfügt über eine Sammlung von Inodeview -Objekten. Eine der Eigenschaften von InodeView ist, welcher Knotentyp es ist.

Sie holen die richtige InodeView ab. Sie schließen die aktuelle InodeView, setzen die aktuelle InodeView auf die, die Sie abgerufen haben, übergeben sie den Knoten und sagen, dass es sich selbst anzeigt.

Sie haben die Wahl darüber, über was InodeView sprechen wird. Für jeden der verschiedenen Typen können Sie ein Formular/eine Steuerung registriert haben. Zum Beispiel ein InodeViewText, InodeViewImage usw. oder nur ein Omnibus Inodeviewform und lassen Sie das Objekt in der Implementierung von InodeView die tatsächliche Zeichnung kümmern.

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

Was das Hinzufügen, Löschen und Erstellen von Knoten betrifft, so würde dies durch die Wechselwirkung zwischen der Form implementieren, die Inodetreeform und Nodetreescreen implementiert. Zu den Dingen, die dies tun, wird die Befehle ausführen, die Sie bereits erstellt haben, um das Modell zu ändern.

Wenn Sie alles hinter einer Schnittstelle implementieren, 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 beeinflussen, solange sie die Schnittstellen weiterhin korrekt implementieren.

Dies ist eine Variante der passiven Sicht auf die Website von Martin Fowler.

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