Ok, se hai classi generate da Entity Framework in qualsiasi punto vicino al tuo livello di servizio, non separerai le preoccupazioni correttamente.
Dai un'occhiata a EF POCO . Quello di cui hai veramente bisogno per mantenere separato il codice logico / DA / frontent (e quindi mantenibile) è il seguente setup (e un framework di iniezione di dipendenza decente):
- X.Web - Viste + logica di visualizzazione (elementi di formattazione ecc.)
- X.Interfacce - Definizioni dei tuoi servizi in forma di interfaccia
- X.Implementation - I tuoi servizi in forma di classe concreta
- X.DataModels - Definizioni degli oggetti dati e delle interfacce di accesso ai dati per ciascuno di essi
- X.DataAccess. "Inserisci il nome dello strumento DA qui" - questo è dove vanno le implementazioni delle tue interfacce di accesso ai dati.
In questo modo ti stai costringendo a tenere ogni serie di oggetti nascosti agli altri. Ad esempio, il livello di servizio dovrà conoscere il livello DA, ma non il modo in cui raggiunge effettivamente il suo DA, quindi ha solo bisogno di un riferimento esplicito all'assembly X.DataModels, dove risiedono i contratti di interfaccia per il livello DA.
Non vuoi davvero passare nulla del tuo specifico livello di accesso ai dati nel tuo servizio per un semplice motivo: cosa succede se cambi la metodologia DA?
Non sto parlando di un cambio di database qui: cosa succede se vuoi far scorrere uno strato di cache? Sarà molto più difficile se devi analizzare l'oggetto EF nel tuo livello di cache, poiché dovrai suddividere il codice di analisi in classi separate e condividerlo tra i livelli, che quindi lega strettamente i livelli Service e Cache. L'altra opzione sarebbe quella di mettere il livello di cache davanti al livello di servizio, tuttavia questo porterà altri problemi alla tabella (come i set di dati che vengono utilizzati ripetutamente in diversi servizi che vengono memorizzati nella cache in tempi leggermente diversi, il che può portare a tutti i tipi di nonesense).
Modifica
Sì, sono andato un po 'fuori pista in tutte le "lezioni EF di passaggio" su cosa.
La conversione dall'oggetto dei dati alla vista dovrebbe essere fatta nel controller: sei completamente corretto su questo. Quanto sopra si applica comunque:)