Domain-Driven Design é uma furada?

33 respostas
L

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?

33 Respostas

Dennys

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?

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

Vou ver a resposta da galera!!!

Bom post!

abstract

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

pcalcado

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:

danieldestro

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

L

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.

Ferryman

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

rodrigoy

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.

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.

leofernandesmo

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.

É 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:

Y

Parei de ler nesse ponto.

Y

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.

jonataswingeter

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.,

Thiago_Senna

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:

rodrigoy

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:

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]

Thiago_Senna

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-[telefone removido].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:

sergiotaborda

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.

rodrigoy

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$.

Alessandro_Lazarotti

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.

Rodrigo_Carvalho_Aul

É 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

xandroalmeida

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.

O

É verdade, como o J2EE (agora JEE) nos condiciona a programaar proceduralmente.
E vai questionar com os “Arquitetos” BAM-BAM-BAM para vc ver. Vc apanha.

A

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?

Só para constar…

Gavin King é o criador do Hibernate. Hoje, ele tem outro filho (o Seam).

Christian Bauer, atualmente, é o maior contribuidor do projeto Hibernate.

Esses caras devem ter alguma razão no que falam, não!?

Y

Só para constar…

Gavin King é o criador do Hibernate. Hoje, ele tem outro filho (o Seam).

Christian Bauer, atualmente, é o maior contribuidor do projeto Hibernate.

Esses caras devem ter alguma razão no que falam, não!?

Entao ta explicado, a praia deles eh outra.

De qqr forma, seja la quem for, nao se deve criticar algo sem nunca ter lido.

A

YvGa:
Só para constar…

Gavin King é o criador do Hibernate. Hoje, ele tem outro filho (o Seam).

Christian Bauer, atualmente, é o maior contribuidor do projeto Hibernate.

Esses caras devem ter alguma razão no que falam, não!?

Entao ta explicado, a praia deles eh outra.

De qqr forma, seja la quem for, nao se deve criticar algo sem nunca ter lido.

Pelo que eu li nos posts até que eles entendem bem de DDD, pelo menos mais do que a média por aqui… :wink:

Y

Ja pelo q eu entendi alguns disseram nem ter lido.

Pra eles terem escrito uma ferramenta como hibernate a experiencia deles deve ser muito grande em DB, ou seja, essa é a especialidade deles, talvez nao tenham tanta assim em arquitetura.

Mas enfim, o problema eh o conceito do Repository q o pessoal perde. Eles reclamam dizendo q eh igual ao DAO e q entao nao ha necessidade. Primeiro q segundo DDD repositorios sao concretos, nao se abstrai, nao tem generico, nem reutilizavel. A responsabilidade dele eh o seu agregate e nada mais. Mudam as regras, mudam os repositorios. Claro q tem muita gente usando eles como DAO, mas nao eh esse o intuito.

Vale lembrar tambem q o Eric Evans sequer menciona o pattern DAO no livro, o repositorio ta la, por tras dele se vc vai usar DAO, Hibernate diretamente, JDBC ou qqr outro pattern q possa surgir, eh opcao sua e nao invalida o uso do repositorio. Repositorio nao eh mecanismo de persistencia, eh objeto de dominio.

Pelo menos foi assim q eu entendi, a nao ser q eu tenha entendido errado, o q nao eh incomun. :slight_smile:

Thiago_Senna

Não interessa muito as ferramentas que o camarada criou para poder criticar DDD. O fato é que DDD é OO. Ao meu ver, dizer que DDD não funfa é o mesmo que dizer que OO é utopia.

Se DDD não for possível em java do jeito que gostariamos, linguagens mais interessantes é o que não faltam. :wink:

Thiago_Senna

rodrigoy:
Thiago Senna:

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:

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$.

Alt.Net? Não conhecia este termo. Mas nas caças por conteúdo deu pra entender um pouco o que é este tal de “Alt.Net”.

“the ?bee log”:
What does it mean to be to be ALT.NET? In short it signifies:

  1. You?re the type of developer who uses what works while keeping an eye out for a better way.
  2. You reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby, etc.
  3. You?re not content with the status quo. Things can always be better expressed, more elegant and simple, more mutable, higher quality, etc.
  4. You know tools are great, but they only take you so far. It?s the principles and knowledge that really matter. The best tools are those that embed the knowledge and encourage the principles (e.g. Resharper.)

http://laribee.com/blog/2007/04/10/altnet/

Será que é muito difícil instalar o visual studio? rsrs…

A

Thiago Senna:
Ao meu ver, dizer que DDD não funfa é o mesmo que dizer que OO é utopia.

Se DDD não for possível em java do jeito que gostariamos, linguagens mais interessantes é o que não faltam. ;)

Alguém disse que DDD não funciona com Hibernate/Java!? Vamos fazer DDD em Cobol!!!

É possível criar um modelo rico com Hibernate/Java. A ausência de um Repository não restringe o fato de se ter DDD.

Mais uma vez vou repetir:

Respondendo a pergunta do tópico:

Não. DDD não é uma furada, pelo menos quando vc sabe utilizá-la bem com os frameworks que vc escolheu.

pcalcado

Linus Torvalds criou um sistema onde a maioria das instalações de C++. Java, Subversion e CVS roda. Ele é a referência máxima quanto à este sistema. pergunte ao Linus o que ele acha de Java, CVS, C++ ou Subversion.

O problema de Domain-Driven Design é que o livro referência é bem difícil. Tem pessoas nesta thread que já falaram várias besteira sobre ele em outro tópico, se agarram a um ou outro parágrafo sem entender o todo (no caso em específico do blog e da pessoa desta thread sem sequer LER o todo).

Fabio_Kung

Gente, quando eu li todos esses posts não tive a impressão de ninguém atacando o DDD. Foi mais um ActiveRecord x DataMapper.

Não sei de onde vocês tiraram esse flame, a única coisa que o Gavin disse foi que ele ainda não entendia ainda muito bem a necessidade desses tais “Repositórios”. No fim, ele acabou percebendo que os Repositórios são o que ele chama de Daos.

A

Fabio Kung:
Gente, quando eu li todos esses posts não tive a impressão de ninguém atacando o DDD. Foi mais um ActiveRecord x DataMapper.

Não sei de onde vocês tiraram esse flame, a única coisa que o Gavin disse foi que ele ainda não entendia ainda muito bem a necessidade desses tais “Repositórios”. No fim, ele acabou percebendo que os Repositórios são o que ele chama de Daos.

Exatamente , apesar das intrigas da oposição…

O cara mais chato do GUJ:

"Magina, o Gavin não leu o livro todo para ter o direito de criticar…

Aliás, quem é o Gavin pra dizer alguma coisa!?"

LeoGomes

Engraçado é ler no próprio livro do Gavin e do Bauer:

Our domain model is a rich object model, with complex associations,
interactions, and inheritance relationships. An interesting and detailed discussion
of object-oriented techniques for working with domain models can be found in
Patterns of Enterprise Application Architecture [Fowler 2003] or in Domain-Driven
Design [Evans 2004].

Hibernate in Action, 2005, Pág. 62

lobinhojr

Rodrigo,

Sou desenvolvedor .Net a maior parte do tempo (Java tbm) e concordo 100% com isso. Eu pessoalmente luto bastante pela utilização de DDD nos projetos que participo. Na empresa na qual era responsável pelo desenvolvimento apliquei DDD e fui muito feliz usando NHibernate (Repository), Windson Castle (Injeção de dependencia)…

Principalmente pq os dois projetos tinham regras de negócio bastante complexas, assim nada melhor do que um “Domain Model” bem feito.

Entretanto, em algumas empresas isso dói muito pra equipe. O BOLOVO com entidades anêmicas seguem firme e forte. (e é pq .Net que não teve aquela coisa chamada EJB 2… sei o q aconteceu não.)

Minha esperança é que quando enfim a MS lance o Entity Framework as coisas mudem. (Tava até pensando em abandonar a causa).

E

Mais uma discução sem prositos, que nao levou a lugar. Quem nao gosta de DDD vai continuar nao gostando, quem gosta vai continuar a usar. novamente podemos aproveitar um ou dois post. Mais uma coisa, vai ter aqueles q acham q usam DDD, e aqueles q so usam pq esta na moda. Existe tantas outras coisas para discutir e se chegar a uma conclusao e ficamos sempre nas mesmas discuções.

Criado 12 de novembro de 2007
Ultima resposta 18 de jan. de 2009
Respostas 33
Participantes 21