Quando aprendi sobre o Domain Driven Design, também fui apresentado aos padrões de repositório e unidade de trabalho que antes pareciam ser de primeira qualidade para as crianças legais que lançavam consultas SQL, como homens das cavernas, em bancos de dados. Quanto mais aprofundado esse tópico, mais aprendi que eles não parecem mais necessários por causa de ORMs como EF e NHibernate que implementam a unidade de trabalho e os repositórios em uma API, chamada sessão ou contexto.
Agora não tenho certeza do que fazer. Repositório ou não Repositório. Eu realmente entendo o argumento de que tais abstrações com vazamentos apenas complicam demais as coisas, ao mesmo tempo em que não adicionam absolutamente nada que possa simplificar o acesso aos dados; no entanto, não parece correto associar todos os aspectos possíveis do meu aplicativo ao, por exemplo, o Entity Framework . Geralmente, sigo algumas diretrizes simples:
- A camada de domínio é o coração do sistema, contendo entidades, serviços, repositórios ...
- A camada de infraestrutura fornece implementações de interfaces de domínio de uma preocupação de infraestrutura, por exemplo, arquivo, banco de dados, protocolos.
- A camada de aplicativo hospeda uma raiz de composição que conecta as coisas e orquestra tudo.
Minhas soluções geralmente são assim:
Domain.Module1
Domain.Module2
IModule2Repo
IModule2Service
Module2
Infrastructure.Persistence
Repositories
EntityFrameworkRepositoryBase
MyApp
Boostrapper
-> inject EntityFrameworkRepositoryBase into IRepository etc.
Eu mantenho minha camada de domínio limpa usando uma IRepository<'T>
que também é uma preocupação de domínio, não depende de mais nada que me diga como acessar dados. Quando agora eu faria uma implementação concreta IModule2Service
que requer acesso a dados, teria que injetar DbContext
e, por isso, acoplá-lo diretamente à camada de infraestrutura. ( Chegando ao projeto do Visual Studio, isso pode ser realmente complicado por causa de dependências circulares! )
Além disso, o que pode ser uma alternativa para depositários e fucktons de obras ? CQRS? Como alguém abstrai uma estrutura infra-estrutural pura?