Estoy tratando de determinar la mejor manera de diseñar un proyecto .NET Entity Framework para lograr un buen enfoque en capas. Hasta ahora lo he probado en un juego basado en navegar donde los jugadores poseen y operan planetas. Así es como yo lo tengo:.NET Diseño del proyecto del marco de la entidad (arquitectura)
Sitio Web
Este contiene toda la parte delantera.
C# Proyecto - MLS.Game.Data
Este contiene el archivo EDMX con todas mis asignaciones de datos. No hay mucho más aquí.
C# Proyecto - MLS.Game.Business
Este contiene varias clases que llamo como 'Managers' PlanetManager.cs. El administrador del planeta tiene varios métodos estáticos que se usan para interactuar con el planeta, como getPlanet (int planetID) que devolvería un objeto de código generado de MLS.Game.Data.
Desde el sitio web, voy a hacer algo como esto:
var planet = PlanetManager.getPlanet(1);
Devuelve un objetoplaneta del de la MLS.Game.Data (generado a partir de la EDMX). Funciona, pero me molesta hasta cierto punto porque significa que mi parte delantera tiene que hacer referencia a MLS.Game.Data. Siempre he pensado que la GUI solo debería hacer referencia al proyecto Business.
Además, he descubierto que mis clases de Gerente tienden a ser muy pesadas. Terminaré con docenas de métodos estáticos en ellos.
Entonces ... mi pregunta es: ¿cómo los demás diseñan sus proyectos ASP EF?
EDITAR
Después de un poco más sin embargo, hay elementos adicionales que me molestan. Por ejemplo, digamos que tengo mi objeto Planeta, que nuevamente es código generado por el asistente. ¿Qué pasa si llega el momento en que mi planeta necesita tener una propiedad especializada, decir "Población" que es un tipo de cálculo basado en otras propiedades del objeto Planeta. ¿Querría crear una nueva clase que herede de Planet y luego devolverla? (Hmm, me pregunto si esas clases están sellados por la EF?)
Gracias
en respuesta a su edición - que es donde la separación de los datos y objetos ricos entra en su cuenta. los objetos ricos entienden cómo exponer sus propiedades mientras encapsulan las operaciones que los modifican. los DTO son meramente para transferencia de datos a la capa de persistencia y no requieren lógica. – flesh