Per prima cosa dovresti notare che MVC è un pattern relativo all'interfaccia utente. Mi ci sono voluti diversi anni per capire questo schema correttamente. Anche MVC, non è un modello reale, è più simile a un approccio generale, perché esistono varie implementazioni.
Ad esempio, Model-View-Presenter è un'incarnazione su pattern MVC con responsabilità leggermente modificate, molto adatto per applicazioni desktop. In ogni caso, il presentatore in questo approccio implementerebbe un modello di osservatore e la vista è oggetto osservabile. Inoltre, di solito, quando la vista è in qualche modo complessa, vorrei introdurre un oggetto ViewData
, o il cosiddetto ViewModel
, che contiene i dati visualizzati e immessi dall'utente. Anche questa vista caso diventa un osservatore per questo oggetto ViewModel
.
In caso di applicazioni desktop di grandi dimensioni, non è possibile rimanere con un buon codice usando solo pattern MVC. Ci sarà troppa responsabilità per ogni livello. Quel caso MVC è solo una parte superiore dell'intera applicazione. Direi un piccolo esempio dalla propria esperienza.
Tutta la logica aziendale implementata dai comandi , comandi restituiti da CommandFactory ( pattern di fabbrica ). C'è anche la logica ortogonale per i comandi, come controllare i diritti di accesso e la registrazione delle azioni commerciali eseguite. Questa parte ortogonale utilizza intensamente il pattern Decorator . Nel mezzo dell'applicazione c'è un modello dello stato attuale dei dati, che non è un semplice modello mappato su database, ma un modello che ha un comportamento correlato ai processi aziendali sotto il cofano. Questo modello è un gruppo di oggetti osservabili, che osserva il livello dell'interfaccia utente (pattern MVP). La creazione esatta dell'oggetto e il ciclo di vita sono controllati dai modelli di iniezione ServiceLocator / Dependency.
Detto questo, quando un'applicazione diventa sempre più grande e diventa più complessa, devi dividerla in parti il più possibile indipendenti, in modo da coinvolgere più persone in un progetto. Per ridurre la complessità e non soffrire di una sindrome NIH (Non-inventata-Qui) ci sono molti modelli che darti un modo di implementare una soluzione per i tipici problemi di progettazione che è ben comprensibile per altri programmatori.