Actualmente nos encontramos en una situación en la que tenemos que elegir entre usar un mapeador relacional de objetos listo para usar o rodar el nuestro
Tenemos una aplicación heredada (ASP.NET + SQL Server) donde la capa de datos y la capa de negocios desafortunadamente se unen. El sistema no es particularmente complicado en términos de acceso a datos. Lee datos de un gran grupo (35-40) de tablas interrelacionadas, las manipula en la memoria y las guarda en otras tablas en un formato de resumen. Ahora tenemos la oportunidad de refactorizar y estamos buscando tecnologías candidatas para usar para separar y estructurar adecuadamente nuestro acceso a datos.
Independientemente de la tecnología que decidamos, nos gustaría:
- tener objetos POCO en nuestro modelo de dominio que son ignorantes de persistencia
- tener una capa de abstracción que nos permita realizar pruebas unitarias de nuestros objetos de modelo de dominio contra una fuente de datos subyacente simulada
Obviamente, hay muchas cosas sobre esto en términos de patrones y marcos, etc.
Personalmente, estoy presionando para que use EF junto con el Generador de repositorios comprobables de unidades ADO.NET / Generador de entidades POCO . Satisface todos nuestros requisitos, se puede agrupar fácilmente dentro de un patrón Repo / UnitOfWork y nuestra estructura de base de datos es razonablemente madura (ya se ha sometido a un refactorizador) de modo que no haremos cambios diarios al modelo.
Sin embargo, otros en el grupo están sugiriendo diseñar / rodar nuestro propio DAL completamente desde cero. (Custom DataMappers, DataContexts, Repository, Interfaces en todas partes, Inyección de dependencia exagerada para crear objetos concretos, Traducción personalizada de consultas de LINQ a subyacente, Implementaciones de almacenamiento en caché personalizadas, Implementaciones de FetchPlan personalizadas ...) la lista continúa y, para ser franco, son huelgas yo como locura
Algunos de los argumentos planteados son "Bueno, al menos estaremos en control de nuestro propio código" o "Oh, he usado L2S / EF en un proyecto anterior y no fue más que dolores de cabeza". (Aunque he usado ambos en Producción anteriormente y he encontrado que algunos problemas son pocos y distantes entre sí, y muy manejables)
Entonces, ¿alguno de sus desarrolladores / arquitectos súper experimentados tiene alguna palabra de sabiduría que pueda ayudarme a alejar este producto de lo que me parece que va a ser un completo desastre? No puedo evitar pensar que cualquier beneficio obtenido al esquivar los problemas de EF se perderá con la misma rapidez al intentar reinventar la rueda.