Ich baue derzeit die Clientseite eines Flex/PHP-Projekts mit dem Präsentationsmodellmuster.Behandeln des clientseitigen Domänenobjektstatus in einem Präsentationsmodell
Was ich zu erreichen versuchen:
Im Moment habe ich einen Blick Anzeige nicht bearbeitbaren Informationen über ein Domain-Objekt namens Knoten. Abhängig davon, ob der Knoten bearbeitbar ist und der Benutzer über die richtigen Berechtigungen verfügt, wird eine zusätzliche Ansicht verfügbar, in der Änderungen an diesem Objekt vorgenommen werden können. Alle vorgenommenen Änderungen werden nur dann auf den Server übertragen, wenn der Benutzer sich entscheidet, Änderungen zu speichern. Wenn Änderungen an einem NodeA vorgenommen werden und der Benutzer zu einem anderen NodeB navigiert, ohne sie zu speichern, wird NodeA in seinen ursprünglichen Zustand zurückgesetzt.
Entwurf:
Ich habe eine Uhr für die Info Ansicht, die einen Verweis auf die aktuelle Knoten zu halten. Die PM für die Bearbeitungsansicht wird von dieser Info-PM erweitert und fügt Methoden hinzu, um Änderungen am umschlossenen Node-Objekt vorzunehmen. Beide PMs haben die gleiche Knotenreferenz, die in sie injiziert wird, und alle Felder in den Info/Edit-Ansichten sind über ihre PMs an den Knoten gebunden.
Das Problem:
Wenn der Benutzer Änderungen an NodeA macht sie aber nicht verpflichten, kann ich nicht von einer eleganten Lösung scheinen zu denken, wieder in den ursprünglichen Zustand zurückzuversetzen. Was ich bis jetzt gedacht habe, ist, separate Wertkopien auf dem PM zu speichern, entweder durch Klonen - Erstellen einer neuen Knotenreferenz oder durch einen identischen Satz von Knoteneigenschaften. Von diesen beiden scheint die erste die bessere Idee zu sein, da der Knoten bereits Domänenlogik enthält, aber ich frage mich, ob das Erstellen von Klonen eindeutiger Domänenobjekte eine schlechte Übung ist, selbst wenn sie in einem begrenzten Umfang verwendet wird.
Die Ansichten haben ihre eigenen PM-Instanzen, aber beide PMs enthalten einen Verweis auf dieselbe Knoteninstanz, die in beide injiziert wird.Wenn ich ihnen separate Instanzen eines identischen Knotens liefern sollte, mache ich drastische Änderungen an meinem Modell, da ich eine Karte/einen Pool von Node-Instanzen (nach ID) behalte. – Stiggler
Ihre Frage hat es so aussehen lassen, als hätten Sie zwei Ansichten für zwei Knoten. Warum gibt es zwei Ansichten mit jeweils einer eigenen PM-Instanz, die auf denselben Knoten verweist? Wenn das der Fall ist, sind Ihre zwei Ansichten wirklich zwei Teile der gleichen Schnittstelle, in welchem Fall nur eine PM für beide hat. –
Wenn ich nur eine PM für beide Ansichten hätte, wie würde das mein Problem lösen? Ich sehe nicht wirklich, wie es einen Unterschied macht. – Stiggler