Evito di considerare il modello come un semplice livello di accesso ai dati. Questo è semplicissimo e ti porta a inserire troppi codici nel Controller Layer. È meglio se metti più di quel codice nel Modello e rendi la persistenza del database solo una parte del codice interno del Modello. Mi piace pensare di MVC in questo modo:
- Controller: gestire l'input, determinare quale modello e quale View istanziare
- Vista: presentazione dei dati delle applicazioni
- Modello: tutti gli altri la logica per l'applicazione, tra cui ma non limitato a DAL
Questo è in pratica il modello Page Controller.
Un altro modo per pensarci è questo: si supponga di dover trasferire la propria app Web su un'altra piattaforma, ad esempio un'app della riga di comando o un'applicazione GUI desktop. Quali parti della logica dell'applicazione dovresti riutilizzare? Il controller e la vista cambieranno quando porti la tua app su un'altra piattaforma, perché l'implementazione di input e output dovrebbe cambiare. Il codice che non ha bisogno di cambiare dovrebbe essere implementato nel tuo Modello.
Se hai risolto correttamente la separazione delle preoccupazioni, il modello, la vista e il controller sarebbero stati accoppiati minimamente e potresti modificare l'implementazione di uno senza influire troppo sugli altri. Se cambi il Modello e ti ritrovi a riscrivere un sacco di codice nel Controller o nella Vista, probabilmente non hai separato adeguatamente questi livelli. E viceversa.
Ulteriori informazioni su Martin Fowler's Anemic Domain Model antipattern o Domain Driven Design Quickly per ottenere altre prospettive.
Vedere anche il mio blog from 2008 che ho scritto in risposta a persone che denunciano il pattern Active Record. Ha ottenuto alcuni buoni commenti e discussioni.
fonte
2009-11-18 05:12:42
Sono d'accordo. I controller skinny e i modelli di grasso mi semplificano la vita. –