Domain-Driven Design é uma furada?

Já ouvi falar desse tal de DDD (Domain-Driven Design), inclusive de gente daqui do fórum, e achei a idéia bastante interessante.

Porém, no blog In Relation To, pelo menos nos últimos cinco posts (http://in.relation.to/Bloggers/SilliestPersistencePostEver , http://in.relation.to/Bloggers/WhatMethodsBelongOnAnEntity , http://in.relation.to/Bloggers/RepositoryPatternVsTransparentPersistence , http://in.relation.to/Bloggers/OnReligionWhyImAnIgnorantCProgrammerAndDontKnowWhatAnObjectIs , http://in.relation.to/Bloggers/StillConfusedAboutRepositories), Gavin King e companhia fazem críticas a essa arquitetura.

Aí fiquei na dúvida, será que DDD é tão bom assim?

[quote=Leonardo3001]Já ouvi falar desse tal de DDD (Domain-Driven Design), inclusive de gente daqui do fórum, e achei a idéia bastante interessante.

Porém, no blog In Relation To, pelo menos nos últimos cinco posts (http://in.relation.to/Bloggers/SilliestPersistencePostEver , http://in.relation.to/Bloggers/WhatMethodsBelongOnAnEntity , http://in.relation.to/Bloggers/RepositoryPatternVsTransparentPersistence , http://in.relation.to/Bloggers/OnReligionWhyImAnIgnorantCProgrammerAndDontKnowWhatAnObjectIs , http://in.relation.to/Bloggers/StillConfusedAboutRepositories), Gavin King e companhia fazem críticas a essa arquitetura.

Aí fiquei na dúvida, será que DDD é tão bom assim?

[/quote]

Hummm acho que isso vai dar uma boa “agitada” no forum… :slight_smile:

Vou ver a resposta da galera!!!

Bom post!

Antes de responder a sua dúvida. Já leu o livro do Evans == Domain Driven Design? Se não leu, seria bom.

O problema do Bauer é que ele não entendeu repositórios (o outro post não fala exatamente sobre DDD mas é apenas uma crítica ao Uncle Bob, pelo que lembro). Basta ver como ele refuta grosseiramente os argumentos contrários à sua idéia.

Quem frequenta o forum do Hibernate ou este blog há algum tempo sabe que não entender algo nunca foi pré-requisito para criticar :slight_smile:

Comprei este livro em Janeiro de 2005 e ainda não li.
Shame on me! :oops:

Esse livro é bom? Ou tem algo mais “Head First”? Só há algum tempo eu ouvi falar de DDD, e eu gostaria de ler algum livro sobre o tema.

Eai pessoal

Se DDD é uma furada, então OO também é… na minha concepção DDD que é OO “de verdade”.
O pior é que é tão dificil fazer os desenvolvedores (e até arquitetos) entenderem isso… o pessoal acha que porque usa java esta programando OO, mas na maioria dos casos parece que existe uma barreira na mente das pessoas que diz:

  • Entity não pode ter lógica
  • Separe sua lógica em serviços que manipulam os entitys

Já vi bastante arquitetura que acredita ser OO apenas porque os entitys usam herança, polimorfismo, etc, porem a logica é implementada em serviços separados.

Eu vivo comentando que ejb3 não eliminou a necessidade da DI do Spring por não fazer DI em entity… e alguns me respondem que se pretendo injetar alguma coisa nos entitys então tem algo errado com o design… :shock: :cry: e por aí vai…

Agora DDD não é bala de prata… é preciso analisar quando vale a pena utilizar. As vezes um transactionScript pode resolver seu problema muito mais rápido (dependendo da complexidade).

Para tudo há prós e contras… não podemos generalizar e dizer que DDD ou TransactionScript é furada. Tudo depende do contexto.

Bom é isso que eu acho.

Abraço a todos

Ferry

[quote=Leonardo3001]
Esse livro é bom? Ou tem algo mais “Head First”? Só há algum tempo eu ouvi falar de DDD, e eu gostaria de ler algum livro sobre o tema.[/quote]

Este é muito bom:

Apesar dos exemplos serem em .NET (C#), fala sobre o ciclo completo e também abrange muito sobre TDD. É uma oportunidade de aprender DDD, C# e TDD.

(dica do Shoes muito boa).

Rodrigo Y.

Esse livro é bom? Ou tem algo mais “Head First”? Só há algum tempo eu ouvi falar de DDD, e eu gostaria de ler algum livro sobre o tema.[/quote]

É a referência na área.

Acho que agora bem que Eric Evans ou outro defensor (com nome) de DDD poderia escrever uma resposta. A algumas semanas Gaving King ficou P*to pq fizeram uma comparação do Hibernate com Active Record e o autor não usou algumas das novas features do Hibernate 3.

Posta alguma coisa no seu blog em inglês Shoes…e coloca la o endereço no trackback do blog do Bauer. :smiley:

Parei de ler nesse ponto.

O problema do DDD eh q eh visto por muitos como o calice sagrado, aquilo q contem toda a essencia das coisas.

Todo mundo pensa - assim com eu pensei - que ia comprar o livro, ler em uma ou duas semanas e depois ligar pro Evans e pro Fowler pra marcar uma cerveja e discutir o futuro do desenvolvimento de software. E nessa o neguinho quebra a cara.

DDD eh dificil pacas. Nao eh uma descricao de patterns (embora tenha alguns). Ele ensina a vc ficar atento a algumas coisas pra descobrir um design melhor, mas nao te ensina um design melhor pro teu problema (e nao teria como, afinal eh teu problema). Eh dificil, complexo e com exemplos q vc nao consegue facilmente transportar para o seu dia-a-dia. Vc tem q ler e reler e reler e aos poucos vc vai pegando uma coisa aqui e outra ali.

Pelo menos esta sendo assim comigo.

Mas mesmo assim é um livro indispensavel.

DDD não é uma bala de prata.

DDD é voltar às origens da verdadeira Orientação a Objetos
que foi perdida durante os anos de difusão da arquitetura J2EE.

Tem momentos que o TS vai resolver…vai!

Tudo depende…mas a princípio, os desenvolvedores precisam
entender o que é de fato orientação a objetos e o DDD será uma
"luva". :smiley:

Att.,

E que Deus abençoe o DDD, o avanço natural do desenvolvimento OO.

A minha única crítica ao DDD é que acho ele pouco acessível. Incrível como coisas bizorrêscas como Entity Beans conseguiu se difundir tão rápido e contaminar a cabeça dos programadores enquanto DDD e princípios básicos de OO mal conseguem sair do lugar.

Se por um lado DDD é ótimo, por outro lado ler o livro do Evans demanda alguma certa paciência (ou QI, rsrs), tornando o processo de ‘re-aprendizagem’ um tanto doloroso. Falta algum material mais mamão com açúcar. Algo que seja tão convincente quanto o material que convenceu a galera a abraçar os maleditos Entity Beans.

E aproveitando pra desabafar, não é por nada não. Acho que a galera do .Net neste assunto está bem na frente da galera do java, hehe. Essa sugestão de aprender C#, TDD e DDD pode ser uma boa. :smiley:

[quote=Thiago Senna]
E aproveitando pra desabafar, não é por nada não. Acho que a galera do .Net neste assunto está bem na frente da galera do java, hehe. Essa sugestão de aprender C#, TDD e DDD pode ser uma boa. :smiley: [/quote]

Thiago, cara, desculpe, mas isso que você falou é um completo absurdo. Não conheço todos os programadores .Net, mas estou no mercado, tenho muito contato muito grande com os alunos e não vejo a comunidade .Net, pelo menos aqui no Brasil, buscar DDD.

Não vejo a Microsoft defender o uso de DDD para .Net, simplesmente pelo fato dela não fornecer ferramentas que facilitem DDD na plataforma (não que não seja possível).

[adicionado] Digo isso porque a comunidade .NET aqui no Brasil ainda está na barra da saia da Microsoft, mas não todos [/adicionado]

Rodrigo,

acontece que sempre que tentei buscar algo mais a fundo sobre Domain Driven Design sempre encontrei exemplos em .Net. Raramente encontro algo em java.

Em .Net por exemplo já são dois os livros que abordam DDD com C#:
http://www.domaindrivendesign.org/books/index.html#DDD_apply
http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470147563.html

Quando pesquisei mais a fundo sobre o Specification Pattern encontrei bons exemplos em .Net também:
http://blogs.interknowlogy.com/timmccarthy/archive/2007/01/22/10863.aspx

To super curioso para saber o conteúdo desta palestra:
http://jimmynilsson.com/blog/posts/jaoo2007.htm
http://jaoo.dk/presentation/LINQ+for+Domain+Driven+Design+(DDD)

Este grupo também é bem frequentado por programadores .Net (tem bastante programador java também)
http://tech.groups.yahoo.com/group/domaindrivendesign/

Não sei como os desenvolvedores .Net aqui no Brasil vêem o DDD, mas lá fora tem uma turminha da pesada interessada no assunto, pelo menos, é o que parece.

Quanto a Microsoft dar suporte a DDD, acho que isso ainda não rola. Talvez o DDD seja um vocabulário de alguns bons programadores .Net que geram conteúdo sobre o assunto. :wink:

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.

Pode ser isso.

Vejo o Alt.Net ganhando força lá fora, mas aqui são poucos que olham a plataforma de maneira independente da M$.

Para mim a parte mais difícil de se lidar com DDD é definir o real Core of Domain (capítulo do Evans).
Em um sistema grande, onde o usuário final pode interagir com diferentes parâmetros da aplicação que modifica os comportamentos das entidades… a fronteira entre aplicação e domínio, é muito tênue.

É verdade, eu sempre trabalhei no .Net usando NHibernate, Spring.Net, DDD, NUnit, etc. De vez em quando eu respondo alguns anúncios de emprego pra .Net só pra ver o que acontece quando eu falo que nunca associei um DataSet a um DataGrid diretamente… estranhamente nunca me chamam pra uma segunda entrevista…

[]'s

Rodrigo Auler

Mas se você não usar DDD, como programar orientado a objetos ? BOLOVO ?

Eu recentemente tiver a opotunidade de usar DDD deste o início em um novo projeto e posso garantir, o tempo gasto na modelagem do Domain no inicio do projeto se pagou várias com a economia de tempo na implementação do restante do projeto.

E os refectoring no Domain no decorrer do projeto não foram nada traumatizantes.