Muitos tutoriais sobre DDD que estudei são principalmente sobre teoria. Todos eles têm exemplos de código rudimentares (Pluralsight e similares).
Na web, também existem algumas tentativas de algumas pessoas de criar tutoriais que cobrem DDD com EF. Se você começar a estudá-los apenas brevemente - notará rapidamente que eles diferem muito um do outro. Algumas pessoas recomendam manter o aplicativo mínimo e evitar a introdução de camadas adicionais, por exemplo, repositório no EF , outras estão gerando camadas extras, muitas vezes até violando o SRP ao injetar DbContext
em Raízes Agregadas.
Peço desculpas se estiver fazendo uma pergunta baseada em opinião, mas ...
Quando se trata de prática - o Entity Framework é um dos ORMs mais poderosos e amplamente utilizados. Infelizmente, você não encontrará um curso abrangente cobrindo o DDD.
Aspectos importantes:
O Entity Framework traz UoW e Repository (
DbSet
) fora da caixacom a EF, seus modelos têm propriedades de navegação
com a EF, todos os modelos estão sempre disponíveis desativados
DbContext
(eles são representados como aDbSet
)
Armadilhas:
você não pode garantir que seus modelos filhos sejam afetados apenas pela Raiz agregada - seus modelos têm propriedades de navegação e é possível modificá-los e chamar
dbContext.SaveChanges()
com
DbContext
você, você pode acessar todos os seus modelos, contornando a raiz raiz agregadavocê pode restringir o acesso aos filhos do objeto raiz via
ModelBuilder
noOnModelCreating
método , marcando-os como campos - ainda não acredito que seja o caminho certo para obter DDD, além de ser difícil avaliar que tipo de aventuras isso pode levar no futuro ( bastante cético) )
Conflitos:
sem implementar outra camada de repositório que retorne agregado, não podemos nem mesmo resolver parcialmente as armadilhas acima mencionadas
implementando uma camada extra de repositório, estamos ignorando os recursos internos do EF (todos
DbSet
já são um repositório ) e complicando demais o aplicativo
Minha conclusão:
Perdoe minha ignorância, mas com base nas informações acima - o Entity Framework não é adequado para o Design Orientado a Domínio ou o Design Orientado a Domínio é uma abordagem imperfeita e obsoleta .
Eu suspeito que cada uma das abordagens tem seus méritos, mas agora estou completamente perdida e não tenho a menor idéia de como reconciliar EF com DDD.
Se eu estiver errado - alguém poderia pelo menos detalhar um conjunto simples de instruções (ou até mesmo fornecer exemplos decentes de código) de como proceder com o DDD com a EF, por favor?