Non ci sono standard chiari su come strutturare il livello "M" di un'applicazione MVC. Detto questo, ho riscontrato costantemente problemi nell'utilizzo di business class (o modelli di dominio o modelli ORM) nel livello di vista di un'applicazione.
- La logica di visualizzazione si insinua nelle classi di business
- La logica di visualizzazione viene caricata su tutti i modelli di visualizzazione
- Nessuna chiara indicazione al programmatore di ciò che è assolutamente necessario per generare una vista
- Le convalide specifiche della presentazione terminano con classi inquinanti che non si riferiscono alla presentazione
-
Le classi commerciali vengono modificate per consentire dati non validi in base alle regole aziendali, poiché la classe viene utilizzata per eseguire il rendering di un modulo (e pertanto deve consentire l'immissione di dati non validi)
Questa è la grande ragione per separare i modelli di visualizzazione dalle business class!
Per questo motivo creo quasi sempre modelli di visualizzazione per le mie opinioni, circa il 99% delle volte. Non c'è molto sforzo in più per creare un modello di visualizzazione, e ti dà un posto dove mettere la logica specifica della presentazione. Avere quella separazione in atto dal primo giorno impedisce un imminente refactoring in seguito quando le esigenze dell'interfaccia utente si espandono.
Questo refactoring accade. Ogni. Singolo. Tempo.
Anche se le classi aziendali e i modelli di visualizzazione hanno esattamente le stesse proprietà, è OK copiare i dati. Non è corretto copiare la logica. E non è corretto combinare la logica di presentazione con la logica aziendale (o logica di archiviazione dei dati).
Separare i modelli di visualizzazione e le classi di business si riduce a Separazione dei dubbi ed è semplicemente una buona progettazione orientata agli oggetti.
In framework come ASP.NET MVC che utilizzano i modelli Razor, non si ottengono errori di compilatore nelle viste quando si rinomina un nome di proprietà o classe, il che complica il refactoring. Se si dispone di un modello di visualizzazione, è possibile refactoring delle classi di business come si ritiene opportuno e si otterranno errori del compilatore nei modelli di visualizzazione per modifiche incompatibili.
Se hai utilizzato le tue lezioni di business direttamente nelle tue visualizzazioni, allora ottieni un errore di run-time, che è più difficile da eseguire il debug e richiede più tempo per essere risolto.
Riguardo a YAGNI (non ne hai bisogno)
Il principio YAGNI ci dice di non costruire cose che non sono necessarie. Il problema è che le interfacce utente e le regole aziendali subiscono molti cambiamenti nel corso della vita di un'applicazione. Separare i due nelle proprie classi non sta violando YAGNI. Ricordati di non pensare solo a "Oggi". Le cose cambieranno e separare i modelli di visualizzazione dalle business class ti offre una zona cuscinetto tra questi due tipi di modifiche.