Então, Alexsandro Lopes, tudo o que sei sobre DDD até agora é muito pouco, baseado em 2 artigos que li e muita coisa postada por outros usuários aqui. Comprei ontem o livro Domain-Driven Design - Atacando as Complexidades no Coração do Software, de Eric Evans, agora é esperar chegar e ler, pra tirar as conclusões.
Chegou em um ponto muito interessante, mas não se esqueça de que teríamos que entender o porque a arquitetura não é utilizada comercialmente. Lembro-me das aulas que tive em uma empresa - localizada aqui em minha cidade - oferecido em um curso visando contratar estagiários. O curso era de OO e C#. A maneira como passaram a programar em C#, era idêntica aos “modelos anêmicos” descrita pelo Fowler. E se trata de uma grande empresa, que tem contratos com outras grandes empresas do Brasil. Um certo dia no curso, perguntei ao nosso instrutor exatamente sobre isso, porque nos era passada aquela forma de programar, se não era a correta conceitualmente - nós já tínhamos tido aulas de OO na faculdade. Ele nos respondeu simplesmente que é como a maioria sabe programar. e que mudar isso poderia levar muito tempo. Como todos sabemos, se uma empresa desse porte resolve mexer nisso, vai levar muito tempo para que a adaptação seja feita em 100% - mesmo que isso seja feita gradualmente.
Eu não acredito que a forma que todos dizem ser a “comercialmente viável de programar” seja a única. Tanto que desisti de trabalhar em empresas desse porte por conta disso: todos sabem que estão fazendo errado, e continuam a fazer como isso não fosse nada. “Se está funcionando assim, pra que mexer?”
Aí estão outros dois pontos que são muito discutidos hoje em dia.
1 - O papel do analista, o que ele faz, o que teve que estudar na graduação, etc. Mas nem vou entrar nesse mérito porque não acho necessário.
2 - Fábricas de software. Esse é outro ponto crucial. O que prega a OO? O desenvolvimento das aplicações fortemente baseadas no negócio. Então, imagine uma empresa que crie sw para todo tipo de negócio. Não acha isso uma contradição? Deve estar pensando, “ai entra o analista”. Sim, porém, o tempo para essa etapa também é curto, e o negócio que deve ser tratado pelo sw pode não ser bem entendido. Por essas e outras questões, acho que a fábrica de software é hoje em dia obsoleta - eu e mais um punhado de autores de engenharia de sw.
Talvez eu não tenha entendido, mas achei uma contradição ai. Como vou manter 100% o estado do objeto se não aplico as regras de negócio nele? Se eu deixar que alguém o altere externamente, de acordo com alguma condição, não seria uma regra? E essa regra não seria do domínio?
Concordo em partes contigo, pois me parece que geralmente o cliente e pede um programa em linguagem “x”. Pra ele não interessa nada se é OO - a maioria nem sabe o que é isso mesmo. Mas perceba que o que discutimos aqui é diferente. Um sistema pode ser escrito em qualquer linguagem, com quaisquer padrões - e até anti-padrões, como a modelagem anêmica - e terá a mesma aparência pro usuário final. Porém, a diferença entre eles quanto a qualidade e facilidade de manutenção será gritante. A OO foi criada com esse propósito, a qual a diferencia em relação a programação estruturada. Agora, se vamos utilizar modelagem anêmica, a qual, segundo o próprio fowler, se parece com a programação estruturada, qual o ganho que temos com isso?
Dê uma lida neste artigo, quando puder: http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/
Repare que eu também ainda tenho muito mais perguntas do que respostas, principalmente sobre DDD.
Muito obrigado por estar participando, e dando sua opinião. Espero que continue acompanhando o tópico, e expressando suas idéias e dando sugestões.
Abraços!