[quote=emerleite]Sérgio, dizer se getVersion descaracteriza DDD ta beirando o absurdo vai?
[/quote]
Entenda getVersion como um exemplo de método/atributo de infra/estrutura.
Eu acredito que os conceitos são para ser compreendidos ao pé da letra. Só depois de o compreeder ao pé da letra vc se pode dar ao luxo de não os seguir. Só depois de os entender o trade-off será realmente um trade ( uma troca) e não apenas uma escolha pelo mais simples, mais comum … ou mais gambiarra…
Apenas com um entendimento consistente pode haver um design coerente.
Se eu chamar de DDD qualquer coisa que tenha entidades , serviços , repositorios e VO , e não seguir ao pé da letra vou acabar concluindo que EJB é DDD. :shock:
humm… foi exactamente ao não usar Hibernate/JPA que precisei do getVersion, getKey e outros companheiros deles…
[quote]Poderiamos fazer tudo com XML de mapeamento ou SQL dentro do DAO (ARGH), controlar o lock dos registros no braço, em fim, tudo como era antes. Também não acho o melhor dos mundos a forma como é feita hoje.
Agora te pergunto: tem alguma “melhor maneira possível” além dessa? Eu sinceramente não conheço. E outra: Essas coisas tornam DDD um anti-pattern quando usado com EJB como você falou?[/quote]
Maneira possivel ? Claro. O povo não gostou do EJB 2 , apareceu o Spring. O Spring matou a pau ? Toma EJB 3. Não gostou do DAO, apareceu o hibernate. Não gostou do System.out.println() apareceu o Log4J. Existe sempre uma maneira melhor
[explicação longa]
Eu considero que o melhor seria assim:
- Não reimplementar logicas de dominio.
- Não reimplementar logicas de persistencia
- Não reimplementar logicas de apresentação.
Com logicas de dominio não me refiro a logicas de negocio. Por exemplo, Pedido tem itens. Pertence a um cliente. O cliente é uma pessoa. A pessoa é um individuo ou uma empresa. Isso é dominio. Negocio é : se a pessoa está na faixa etária X recebe Y desconto. Se hoje é dia Z os produtos H são mais baratos., etc…
Persistir no banco, em memoria, distribuido, com cache ou sem cache, como HTTP ou sem. Prevayler, SQL Server , Postgres, XML , Banco orientado a objetos … Em ambiente de teste , homologação, produção … em qualquer situação , ocasião e tempo o meu sistema não depender de saber onde estão os dados.
Não ter que implementar mecanismos de procura de dados, filtro, cadastro, consistencia. Seja Swing, HTML, Ajax … Seja distribuido, ou standalone … Todo esse trabalho burocrático é um saco.
Existe sempre uma maneira melhor.
A minha maneira melhor pode não ser a sua. Mas se conseguir me livrar dos 3 pontos acima e poder me concentrar no que o cliente quer - a logica de negocio - já vou achar bom.
Eu entendo o DDD como uma forma de obter o 1. Para isso o dominio tem que ser completamente desprovido de ligações com a infra, porque so dessa forma vou poder reaproveitá-lo em outros sistemas. Pense o tempo que pouparia se existisse um framework de dominio como carrinhos de compras, clientes, produtos, notas fiscais , etc… tudo pronto. VC pega, ajusta e voilá. Isso só é psosivel se as classes forem completamente independentes de frameworks como Hibernate ou tecnologias como JDBC.
O nivel de trabalho, design e esforço necessários para alcançar este ponto são imensos. Por outro lado ha que analizar tecnologias que dão suporte a tudo isto. E mesmo quando vc tenha o framework martelinho de ouro ele ainda tem que ser compativel com padrões : ou então ele tem que ser super bom e virar o padrão.
[/explicação longa]