Per me non c'è alcuna domanda a cui rispondere qui, dovresti sempre cercare di separare il più possibile i componenti.
Al minimo, per ogni nuovo progetto che creo, faccio esattamente i seguenti passi:
- 1) Crea una soluzione vuota per lo studio visivo
- 2) Aggiungi un progetto MVC ad esso
- 3) Aggiungi una libreria di classi ad essa chiamata livello aziendale
- 4) Aggiungi una libreria di classi ad essa chiamata Livello dati
In questo modo segui i buoni principi del design n-Tier. Aggiungi a questo una qualche forma di AOP (ad esempio post-sharp o attributi MVC) per gestire tutti gli elementi che tagliano trasversalmente i livelli e hai una buona architettura solida da cui lavorare.
NO RAW I dati del tuo livello dati dovrebbero mai essere inseriti nel tuo livello di presentazione (l'App MVC), tutto dovrebbe essere combinato e appiattito nel tuo livello aziendale.
Il livello aziendale deve gestire solo oggetti DTO tra sé e la presentazione, con dati non elaborati che introduce dal livello dati e applica anche varie regole specifiche per il dominio dell'applicazione.
Prima con il codice EF e con i pacchetti Nu-get come l'auto-mapper, tutto ciò è incredibilmente facile in questi giorni.
Usa EF nel tuo DAL per ottenere i tuoi dati usando Linq, ADO o qualsiasi altra cosa ti serva.
Utilizza l'auto-mapper per trasformare i dati in DTO da passare al livello aziendale, quindi fai tutto il lavoro che ti serve prima di usare finalmente il mappatore automatico per passare il DTO risultante alla tua presentazione.
Anche se NON stai usando MVC, l'adozione di questa strategia è vincente / vincente, anche per WPF, Webform, Winform e molto altro.
Se lo fai correttamente, la porzione MVC diventa essenzialmente un'esposizione cerebrale di ciò che sta facendo il livello aziendale, e la facilità con cui puoi rimuovere la tua app MVC e inserire un'altra UI nella sua posizione è spaventosamente semplice.
Aggiornamento 14/11/2014
Dopo aver letto il commento più recente aggiunto a questo thread, ho ritenuto che aggiungere questa parte aggiuntiva alla mia risposta fosse giustificato.
La buona architettura è molto più di un semplice "Pretty Code".
Se ottieni un'architettura sbagliata, può essere la differenza tra schiantarsi e bruciare e volare in alto in un tripudio di gloria.
Ho fatto I.T & Lo sviluppo del software in una forma o nell'altra ora dal 1979 circa, e credetemi, ho visto la mia giusta dose di fallimenti e successi in quel periodo.
Quando ho iniziato, ed ero ancora bagnato dietro le orecchie, Object Oriented Programming non era nemmeno una cosa, hai concentrato TUTTO in un unico file sorgente, poi lo hai eseguito attraverso un compilatore, quindi un linker senza alcun tipo di Elementi della GUI per aiutarti.
Alcuni dei codici che ho scritto durante questi periodi erano incredibilmente disordinati, inefficienti e completamente orribili. Quando sono cresciuto, e ho imparato, ho iniziato a capire perché questo tipo di codice ha causato i problemi, mentre scrivere un codice di facile lettura è certamente un'abilità importante, è anche molto importante assicurarsi che la tua area sia anche minimo e segue standard di buon livello.
Ho visto tanti grandi progetti fallire (o almeno lottare molto) nel corso degli anni, e ogni volta che è stato a causa di scelte sbagliate fatte a livello di progettazione architettonica, non posso sottolineare quanto sia importante è quello di ottenere il design e i piani prima ancora di toccare una sola riga di codice.
E mentre sono in argomento, i generatori di codice sono altrettanto pericolosi. Se il tuo generatore di codice crea codice da modelli che controlli TU, allora armi grandiose, ma SE dipendi da modelli, in cui non hai il controllo su come viene generato l'output, allora stai chiedendo dei problemi. Visual Studio è un ottimo strumento e straordinario per la creazione di soluzioni veloci, ma assicurati di conoscere ESATTAMENTE ciò che sta creando dietro le quinte quando fai clic su quel pulsante per fare qualcosa.
Se mi capita di sviluppare una biblioteca, l'ultima cosa che voglio fare è scavare nelle fonti per dirmi come funziona, dipendo dall'architetto che l'ha progettata, per guidarmi, facendo scelte logiche, che sono formate da una conoscenza di grandi solide pratiche di software art.
Semplicemente non mi fiderei di nulla che abbia trasmesso corde e valori discreti come se fossero caramelle durante una festa di Natale, perché ... beh, come posso essere sicuro di quale sia il tipo e la responsabilità della variabile / proprietà / metodo è.
Chi ti fiderebbe di più per comprare una casa? Una società professionale che ha assunto un architetto per sondare, pianificare e progettare una serie completa di piani, che un team di professionisti di Costruttori, Roofers, Plasterers ha poi lavorato come una squadra per implementare, o il ragazzo che vive alla fine della tua strada chi lavora nel settore edile e conosce una cosa o due sulla costruzione di case?
So quale sarà la mia scelta.