2009-11-18 8 views
5

Ho appena iniziato a cercare su mvc e non sono ancora sicuro di averlo capito. Da ciò che ho raccolto sembra un'implementazione di una soluzione a 3 livelli, vale a dire che il modello corrisponde a DAL, livello Controller a livello di business logic e View as Presentation layer.MVC: è solo un modello a 3 livelli?

Sono lontano da qui?

risposta

8

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.

+1

Sono d'accordo. I controller skinny e i modelli di grasso mi semplificano la vita. –

3

Sort of. Ecco come si presenta:

alt text

Il modello più comunemente usato oggi è:

Database -> DAL -> BLL -> Controller -> View Model -> UI 

Dove

DAL == Data Access Layer (aka ORM, Object-Relational mapper) 
BLL == Business Logic Layer 

Notare che non è sempre necessario ogni livello. Il modello BLL e View, ad esempio, può essere facoltativo se l'app è sufficientemente piccola.

Si consiglia di verificare il NerdDinner tutorial. Esso descrive tutti questi concetti in un unico riferimento.

0

Una breve nota, lei ha ragione quando dici il Controller può (non deve) essere il livello di business, e la vista è il livello di presentazione.

Tuttavia il modello sono gli oggetti (a seconda dell'implementazione) che contengono i dati, mentre un livello dati è un livello che recupera/manipola i dati.

Problemi correlati