¿Cómo debo manejar mis objetos de entidad / dominio utilizando IoC / Dependency Injection?

StackOverflow https://stackoverflow.com/questions/1405665

Pregunta

Actualmente estoy usando PLINQO para generar todas mis entidades a partir de la base de datos.

Recientemente, comencé a usar la inyección de dependencia utilizando StructureMap, y como parte del proceso de aprendizaje de "separar mis preocupaciones". Me he dado cuenta de que todas las clases de Entidad generadas contienen propiedades altamente acopladas utilizando EntitySet, parte de LINQ, lo que hace que mis entidades dependan del uso de System.Data.Linq.

Me gustaría continuar usando mis entidades generadas por PLINQO, pero al mismo tiempo, creo que probablemente debería generar algún tipo de objetos de base de clases / datos, y quizás incluso moverlos a un ensamblaje diferente , luego use algún tipo de asignador automático para convertir entre los dos, según sea necesario. En el mejor de los casos (o en el peor, dependiendo de cómo se mire), me gustaría que algunas interfaces los representen, para poder inyectarlos con diferentes tipos concretos más adelante.

¿Esto es una exageración? Eventualmente, dejaré de usar SQL Server directamente para usar los servicios web, y dudo que los EntitySets se conecten tan fácilmente.

¿Alguien tiene algunos buenos ejemplos de trabajar con un escenario como este?

TIA

¿Fue útil?

Solución

Creo que estás en el camino correcto: no dejes que el nombre de las clases L2S generadas te engañen. No son Entidades en la terminología de DDD, sino simplemente representaciones fuertemente tipadas de la base de datos. Si me preguntas, ese es un detalle de implementación que no debería permitirse invadir la capa de dominio.

Con el marco .NET de currect, y si permanece solo con BCL y no utiliza bibliotecas adicionales, su única opción es definir Entidades ignorantes persistentes en su Modelo de Dominio y luego asignarlas a las clases L2S en el acceso a datos capa. Es un dolor, pero AutoMapper puede ser útil en ese sentido.

Si está dispuesto a desviarse un poco del BCL puro, hay bibliotecas de código abierto que ofrecen ignorancia de persistencia, como NHibernate : no tengo ninguna experiencia personal con NHibernate, pero muchas personas inteligentes lo aprecian mucho.

En .NET 4.0, Entity Framework y, por tanto, LINQ to Entities también ofrecerá ignorancia de persistencia .

Jeremy Miller tiene un artículo en la revista MSDN que toca un poco el tema .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top