Quando ao blog mensionado: não ha como aceitar a critica de alguem que não entende o que é DDD, mas podemos aceitar a critica que o pessoal de DDD não explica , ou não evoluiu, os conceitos até ao ponto de vermos blogs com exemplos simples de uso de DDD.
Estas perguntas abaixo são realmente o cerne do DDD e várias vezes originaram threads aqui.
Independentemente de como implementar DDD ( tem gente ai usando EJB para implementar DDD) o que interessa são os conceitos que DDD trás. O conceito de entidade é muito igual ao do EJB , a implementação é que é diferente. Os conceitos mais “novos” e que marcariam alguma evolução são os de: Aggregation (Aggregado) e Specification ( Especificação). O primeiro é uma abstração acima de entidade e o segundo é uma forma de codificar regras.
O Repositorio não é “le piéce de resistance” do DDD mas apenas um artetato necessário ao introduzir Aggregation
(
what problem does it solve ? : Constroi agregados
how do I tell when I need to use it? Quando usar Agregados
)
O conceito de agregado é na realidade velho. Agregado é um nome especificio para ressaltar a natureza de grafo de uma entidade e o controle que ela exerce sobre os outros objetos a si subjugados. É só isso.
Se DDD é uma furada ?
Se vc ler o livro do Evans vc vai achar que é. Várias vezes é mencionado que criar um domain é um processo demorado ( de vários meses) e que mesmo com refactoring é um processo de tentativa e erro. Eu associo isto mais ao uso que ele faz do DDD do que propriamente à filosofia do DDD em si. Afinal se vc contar com experts de dominio que sejam bons comunicandores e vc não for completamente burro, construir um dominio não é tão dificil. O problema é contruir um dominio flexivel que atenta a todos os requisitos - até mesmo aqueles que o dono do negocio ainda não pediu.
A filosofia DDD não é uma furada, mas a sua implementação generica é muito mais dificil do que os autores deixam transparecer. Se usar DDD num programa standalone, é uma maravilha. Mas quando começam a entrar requisitos fortes de arquitetura a implementação naive deles começa a sofrer. A solução disso, do ponto de vista deles é simplesmente refactorar, mas convenhamos que existe um tempo limite e refactorar ad infinitum não é uma estratégia aceitável.