Atualmente, estamos em uma situação em que temos a opção de usar um mapeador relacional de objetos pronto para uso ou lançar nosso próprio
Temos um aplicativo herdado (ASP.NET + SQL Server) em que a camada de dados e a camada de negócios infelizmente estão unidas. O sistema não é particularmente complicado em termos de acesso a dados. Ele lê dados de um grande grupo (35-40) de tabelas inter-relacionadas, manipula-os na memória e salva-os novamente em algumas outras tabelas em um formato de resumo. Agora temos a oportunidade de refatoração e estamos analisando as tecnologias candidatas a serem usadas para separar e estruturar adequadamente nosso Acesso a Dados.
Seja qual for a tecnologia que decidirmos, gostaríamos de:
- temos objetos POCO em nosso Modelo de Domínio que são Ignorantes de Persistência
- ter uma camada de abstração para permitir teste de unidade de objetos de modelo de domínio em relação a uma fonte de dados subjacente simulada
Obviamente, há muitas coisas por aí sobre isso em termos de padrões e estruturas etc.
Pessoalmente, estou pressionando pelo uso da EF em conjunto com o Gerador de repositório testável da unidade ADO.NET / Gerador de entidades POCO . Ele atende a todos os nossos requisitos, pode ser facilmente agrupado em um padrão Repo / UnitOfWork e nossa estrutura de banco de dados está razoavelmente madura (já tendo sido submetida a um refator), de modo que não faremos alterações diárias no modelo.
No entanto, outros membros do grupo estão sugerindo arquitetar / rodar nosso próprio DAL completamente do zero. (DataMappers personalizados, DataContexts, repositório, interfaces em todos os lugares, injeção de dependência em excesso para criar objetos concretos, tradução de consulta LINQ para subjacente personalizada, implementações de cache personalizadas, implementações personalizadas de FetchPlan ...) a lista continua e é franca eu como loucura.
Alguns dos argumentos apresentados são: "Bem, pelo menos, estaremos no controle de nosso próprio código" ou "Oh, eu usei L2S / EF em um projeto anterior e não passava de dores de cabeça". (Embora eu já tenha usado os dois na Produção e tenha encontrado alguns problemas poucos e distantes entre si, e muito gerenciáveis)
Por isso, qualquer um de seus arquitetos / desenvolvedores com experiência no assunto tem alguma palavra de sabedoria que possa me ajudar a desviar esse produto do que me parece ser um desastre completo. Não posso deixar de pensar que qualquer benefício obtido ao se desviar dos problemas da EF será perdido com a mesma rapidez ao tentar reinventar a roda.