Sto cercando di determinare il modo migliore per progettare un progetto .NET Entity Framework per ottenere un buon approccio a livelli. Finora l'ho provato in un gioco basato sulla navigazione in cui i giocatori possiedono e gestiscono pianeti. Ecco come li ho:Layout del progetto .NET Entity (architettura)
Sito Web
Questo contiene tutte le front-end.
C# Project - MLS.Game.Data
Questo contiene il file EDMX con tutti i miei mappature dei dati. Non molto altro qui.
C# Project - MLS.Game.Business
Contiene varie classi che io chiamo come PlanetManager.cs 'Managers'. Il gestore del pianeta ha vari metodi statici utilizzati per interagire con il pianeta, come ad esempio getPlanet (int planetID) che restituirebbe un oggetto codice generato da MLS.Game.Data.
Dal sito, farò qualcosa di simile:
var planet = PlanetManager.getPlanet(1);
restituisce un oggettopianeta dal dal MLS.Game.Data (generato dal EDMX). Funziona, ma mi dà fastidio perché significa che il mio front end deve fare riferimento a MLS.Game.Data. Ho sempre pensato che la GUI avrebbe dovuto solo fare riferimento al progetto Business.
Inoltre, ho scoperto che le mie lezioni di Manager tendono a diventare molto pesanti. Finirò con dozzine di metodi statici in loro.
Quindi ... la mia domanda è: come fanno tutti gli altri progetti ASP EF?
EDIT
Dopo un po 'di più, però, ci sono elementi aggiuntivi che mi preoccupano. Ad esempio, supponiamo di avere il mio oggetto Planet, che viene generato nuovamente dal codice della procedura guidata. E se fosse venuto il momento che il mio pianeta avesse bisogno di avere una proprietà specializzata, diciamo "Popolazione", che è un calcolo di qualche tipo basato su altre proprietà dell'oggetto Planet. Vorrei creare una nuova classe che erediti da Planet e poi restituirla? (Hmm, mi chiedo se le classi sono sigillate dalla EF?)
Grazie
in risposta alla sua modifica - che è dove la separazione dei dati e oggetti ricchi entra in proprio. gli oggetti ricchi comprendono come esporre le loro proprietà mentre incapsulano le operazioni che li modificano. le DTO sono semplicemente per il trasferimento dei dati allo strato di persistenza e non richiedono alcuna logica. – flesh