Domanda

Sto lavorando su una GUI MVC / MVP per la modifica di un documento. Il documento ha una struttura ad albero, con alcuni nodi che rappresentano testo, altri immagini. Il modello dell'app include anche uno stack di comandi, con i comandi che operano direttamente sul modello.

Dato che nodi diversi hanno controlli radicalmente diversi, sto pianificando di implementare singole triadi MVC / MVP per ciascun nodo. Dove sto incontrando problemi è come sincronizzare la creazione e la distruzione dei componenti peer V e C.

Le mie idee:
- ascolta su ciascun nodo per " childAdded " digitare eventi e quindi creare peer basati su tali eventi
- utilizzare una factory per creare nodi nel modello e fare in modo che quella factory crei anche i peer

Quali sono alcuni schemi o best practice comuni per la generazione di controller / view dinamici?

È stato utile?

Soluzione

Consiglio di esaminare alcuni dei pattern di interfaccia utente in questo sito

Per quanto riguarda la tua domanda specifica, farei quanto segue

Il modulo che visualizza i nodi implementerebbe un'interfaccia INodeView

Un metodo dell'interfaccia INodeTreeForm sarebbe la possibilità di aggiungere un singolo nodo. Passerebbe una classe Node creata nell'oggetto NodeTreeScreen. Ci saranno due proprietà chiave. Il primo è la chiave del nodo e il secondo è il tipo di nodo.

Aggiungere il nodo in modo tale che sul controllo sia presente un campo con la chiave.

Insieme all'interfaccia INodeTreeForm avresti un'interfaccia INodeView. Questo coprirebbe l'area di visualizzazione o anche il nuovo modulo che cambierai.

Quando si fa clic sul nodo, passa la chiave a NodeTreeScreen che tende a guardare che tipo di nodo è. Ha una raccolta di oggetti INodeView. Una delle proprietà di INodeView sarà il tipo di nodo che è.

Hai recuperato il giusto INodeView. Chiudete l'INodeview corrente, impostate l'INodeView corrente su quello recuperato, passate il nodo e dite che viene visualizzato.

Puoi scegliere cosa farà INodeView. È possibile avere un modulo / controllo registrato per ciascuno del diverso tipo. Ad esempio un INodeViewText, INodeViewImage, ecc. O solo un INodeViewForm omnibus e lasciare che l'oggetto che implementa INodeView si occupi del disegno reale.

A seconda del toolkit della GUI, ciò potrebbe significare che un modulo potrebbe implementare molte interfacce diverse.

Per quanto riguarda l'aggiunta, l'eliminazione e la creazione di nodi, ciò avverrebbe attraverso l'interazione tra il modulo che implementa INodeTreeForm e NodeTreeScreen. Tra le cose che faranno c'è l'esecuzione dei comandi che hai già creato per modificare il modello.

Implementando ogni cosa dietro un'interfaccia è possibile cambiare l'implementazione senza rovinare il resto del software. L'oggetto che implementa le diverse interfacce può cambiare senza influire sugli altri oggetti purché continuino a implementare correttamente le interfacce.

Questa è una variante della Vista passiva sul sito di Martin Fowler.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top