Alcuni sfondi:
Io e un collega abbiamo interpretazioni diverse di MVC, il che significa che, visto lo stesso problema, stiamo arrivando a soluzioni radicalmente diverse. Viene da uno sfondo Java in cui ogni componente di MVC può tradizionalmente modellare un oggetto e io provengo da uno sfondo Haskell e ho poca o nessuna esperienza con OOP.
Lo spazio del problema:
Il problema che stiamo cercando di modellare agisce un po 'come un ambiente desktop. Abbiamo una nozione della sessione degli utenti (forse il loro login, il loro sfondo del desktop) e i processi sul loro desktop (ad esempio iTunes, Finder, ecc.) Che hanno le loro proprietà del modello (ridotte al minimo, ecc.).
Siamo d'accordo sul seguente punto: pensiamo che HMVC sia la migliore rappresentazione. Siamo d'accordo che abbiamo due oggetti MVC, Session
(desktop) e Process
(applicazione) e che non vogliamo un Process
per avere una nozione di Session
o un backlink.
Una volta che non siamo d'accordo, tuttavia, è il significato principale di MVC e in che modo influisce su dove manteniamo l'elenco dei processi sul desktop degli utenti .
La sua interpretazione:
Egli sostiene un punto molto valido che tradizionalmente è facile da modellare nel codice e nel nostro sistema di rendering. Dice che l'elenco dei processi dovrebbe essere un elenco di oggetti ProcessController
all'interno di SessionController
che a loro volta hanno i loro modelli come oggetti separati al loro interno. Ciò significa che esiste una quantità significativa di stato sia in SessionController
che in SessionModel
che è rilevante per il rendering di SessionView
.
Questo sembra essere molto in armonia con ciò che siamo stati in grado di leggere su Internet in una breve ricerca.
La mia interpretazione:
La mia interpretazione richiede il più grande cambiamento architettonico e sembra più difficile da implementare nel codice, ma credo che sia più concettualmente corretto. Vorrei che qualcuno spiegasse perché questo non è il caso, o presentare un modello diverso (se non MVC) che si allinea con questa interpretazione e evidenzia alcuni punti di forza e di debolezza per entrambi i modelli in modo che possiamo prendere la decisione più consapevole (nessuno di noi ha un strong background nell'architettura software).
Vedo MVC come una triade con tre componenti intercambiabili: il Model
, il Controller
e il View
. Ciò concorda con ciò che sono in grado di leggere su Internet e alcune fonti diranno cose simili a "viste, controller e modelli con la stessa interfaccia dovrebbero essere intercambiabili con effetti diversi". Il modo in cui immagino che funzioni è il seguente:
- Quando si scambia il modello, si cambia il modo in cui i dati vengono convalidati o archiviati
- Quando cambi il controller, stai cambiando il modo in cui si comporta , ma non tutto ciò che potrebbe alterare il contenuto di dati della pagina c della pagina
- Quando si cambia la vista, si modifica il modo in cui la pagina viene visualizzata
Da questo, ho dedotto che dato un qualsiasi Model
e View
, lo scambio solo del controller non dovrebbe cambiare i dati inizialmente visualizzati dalla pagina perché il controller dovrebbe cambiare solo il comportamento e non il 'contenuto' della pagina. Penso che questo sia allineato con la visualizzazione concettuale del controller come un "controller di stazione" in un sistema a binario, un piano del binario come modello e l'effettiva manifestazione fisica e il look / feel delle tracce (in diversi gusti, diciamo " Real 'o' Virtual 3D ') come vista.
Ecco dove non siamo d'accordo:
Ritengo che i dati che verranno visualizzati all'utente in SessionView
vengano modificati dai diversi processi sul desktop (modifico i processi come dati rilevanti ), il SessionModel
dovrebbe contenere l'elenco di istanze di ProcessModel
. Ciò significa che l'utilizzo di qualsiasi SessionController
casuale con lo stesso SessionView
dovrebbe concettualmente mostrare gli stessi dati (processi sul desktop).
Sostiene che ha più senso per un Model
non sapere mai su un altro modello. Ciò significa che SessionController
avrebbe una lista di ProcessController
s al suo interno e ogni oggetto Controller
ha un link al suo modello. Dato un SessionView
e lo stesso SessionModel
ma un diverso SessionController
i dati visualizzati all'utente devono essere radicalmente diversi.
Si prega di discutere per / contro ogni interpretazione e aiutarci a raggiungere il risultato più informato.
Grazie per il tuo tempo!