Se vuoi essere ortodosso su MVC:
- Il Modello implementa l'intera logica del dominio e nient'altro che la logica del dominio. Per un gioco, questo include:
- Lo stato attuale di giocatori, unità, mondo, ecc.
- Persistenza di tale stato
- Le regole del gioco (ad esempio, come le unità possono muoversi, cosa succede quando l'unità X spara all'unità Y, ecc.)
- La vista riguarda la presentazione dell'output all'utente. In un contesto di applicazione Web, ciò significa modelli; A seconda della potenza del tuo sistema di template, potresti aver bisogno di una logica di presentazione al di fuori dei template, e avrai bisogno di un codice di avvio per avviare il motore di template. Anche questi sono parte della vista.
- La parte Controller riguarda l'elaborazione dell'input dell'utente. Per le applicazioni Web, ciò significa analizzare le richieste, inoltrare i sottocontrolli, convalidare gli input e inviarli al modello.
C'è una parte in più per la quale non ho ancora visto una soluzione pulita in un'applicazione web: è necessario incollare quei tre insieme. Nel rigoroso MVC, le tre componenti sono per lo più indipendenti; le uniche connessioni sono tra controller e modello (il controllore invia richieste di modifiche di stato al modello) e tra il modello e la vista (la vista reagisce alle modifiche di stato nel modello). In un'applicazione Web, tuttavia, il controllore in genere richiede almeno un certo controllo sulla vista: la richiesta in entrata determina quale vista utilizzare, e questa informazione non ha assolutamente nulla a che fare con la logica del dominio, quindi in genere il controllore può selezionare una vista. Molto spesso, il controllore si occupa anche di ottenere dati dal modello e di passarli alla vista.
Fin qui la teoria.
Nella pratica di programmazione web moderna, MVC è solitamente inteso come qualcosa di molto diverso, sulla falsariga di:
-
Modelli sono classi che si associano alle entità del database. Di solito derivano da una classe base generica, che implementa le operazioni CRUD standard e la estendono per implementare metodi specifici per la particolare entità che rappresentano.
-
Viste sono classi che eseguono alcune logiche di presentazione come il filtraggio, la formattazione e talvolta anche la traduzione e caricano e applicano un modello.
-
I controllori sono classi che fanno praticamente tutto il resto: ottenere dati di input dalla richiesta, eseguire la logica di dominio sui modelli, leggere i dati dal modello, creare istanze e visualizzare una vista adatta e talvolta anche cose come reindirizzamento.