Isso é uma armadilha do padrão DDD?
Deixe-me primeiro esclarecer alguns equívocos.
DDD não é um padrão. E realmente não prescreve padrões.
O prefácio do livro DDD de Eric Evan afirma:
Os principais designers de software reconheceram a modelagem e o design de domínio como tópicos críticos por pelo menos 20 anos, mas surpreendentemente pouco foi escrito sobre o que precisa ser feito ou como fazê-lo. Embora nunca tenha sido formulada com clareza, uma filosofia surgiu como uma corrente oculta na comunidade de objetos, uma filosofia que chamo de design orientado a domínio.
[...]
Um recurso comum aos sucessos era um modelo de domínio rico que evoluiu através de iterações de design e se tornou parte da estrutura do projeto.
Este livro fornece uma estrutura para a tomada de decisões de design e um vocabulário técnico para discutir o design de domínio. É uma síntese das melhores práticas amplamente aceitas, juntamente com minhas próprias idéias e experiências.
Portanto, é uma maneira de abordar o desenvolvimento de software e a modelagem de domínio, além de um vocabulário técnico que suporta essas atividades (um vocabulário que inclui vários conceitos e padrões). Também não é algo completamente novo.
Outra coisa a ter em mente é que um modelo de domínio não é a implementação de OO que pode ser encontrada em seu sistema - essa é apenas uma maneira de expressá-lo ou de expressar parte dele. Um modelo de domínio é a maneira como você pensa sobre o problema que está tentando resolver com o software. É como você entende e percebe as coisas, como você fala sobre elas. É conceitual . Mas não em um sentido vago. É profundo e refinado, e é o resultado de muito trabalho e coleta de conhecimento. É ainda mais refinado e provavelmente evoluiu ao longo do tempo, e envolve considerações de implementação (algumas das quais podem restringir o modelo). Deve ser compartilhado por todos os membros da equipe (e especialistas em domínio envolvidos) e deve orientar como você implementa o sistema, para que o sistema o reflita de perto.
Nada disso é inerentemente pró ou anti-SQL, embora os desenvolvedores de OO talvez sejam geralmente melhores em expressar o modelo nas linguagens de OO, e a expressão de muitos conceitos de domínio seja melhor suportada pelo OOP. Mas algumas vezes partes do modelo devem ser expressas em um paradigma diferente.
O que me pergunto é: o que acontece quando tenho consultas muito complexas [...]?
Bem, de um modo geral, existem dois cenários aqui.
No primeiro caso, algum aspecto de um domínio realmente exige uma consulta complexa, e talvez esse aspecto seja melhor expresso no paradigma SQL / relacional - portanto, use a ferramenta apropriada para o trabalho. Reflita esses aspectos em seu domínio e a linguagem usada na comunicação de conceitos. Se o domínio for complexo, talvez isso faça parte de um subdomínio com seu próprio contexto limitado.
O outro cenário é que a necessidade percebida de expressar algo no SQL é resultado de um pensamento restrito. Se uma pessoa ou equipe sempre foi orientada para o banco de dados em seus pensamentos, pode ser difícil para eles, devido à inércia, ver uma maneira diferente de abordar as coisas. Isso se torna um problema quando a maneira antiga falha em atender às novas necessidades e requer algum pensamento imediato. O DDD, como uma abordagem do design, é em parte sobre maneiras de encontrar o caminho para sair dessa caixa, reunindo e destilando o conhecimento sobre o domínio. Mas todo mundo parece ignorar essa parte do livro e se concentra em alguns dos vocabulários e padrões técnicos listados.