Rodrigo Allemand

DDD – Princípio, Modelo e Ubiquitous Language

por Rodrigo Allemand em Feb.17, 2009, como DDD

Antes de começar esta série de Posts sobre DDD, vamos definir alguns pontos principais sobre o assunto.

DDD, mas não esse, o do Eric Evans!

DDD, mas não esse, o do Eric Evans!

  • DDD vem de Domain Driven Design, traduzindo: Desenho Dirigido ao Domínio;
  • DDD é uma abordagem para desenvolvimento de softwares;
  • DDD não é um (conjunto de) Design Patterns, é uma metodologia abordagem criada por Eric Evans com a ajuda de outras pessoas (direta e indiretamente);
  • DDD visa atacar a complexidade de construção de um software;
  • DDD foca o desenvolvimento no domínio e na lógica do domínio, que quando complexos são baseados em modelos;
  • DDD é indicado para softwares complexos, mas nada impede que seja utilizado em um dominio bem simples.

Vamos definir, primeiramente o que é Domínio.

Um modelo é um conjunto de objetos que, de forma abstrata, descreve (resolve) aspectos (problemas) de um determinado domínio complexo.

No livro Patterns of Enterprise Aplication Architecture [PoEAA], Martin Fowler define Modelo de Domínio [Domain Model] como:

Um modelo de objetos do domínio que incorpora tanto o comportamento quanto os dados.

Um grande (e muito usado) exemplo de modelo é o mapa mundi, o primeiro, define como os Chineses viam o mundo no século XVIII, depois o mapa mundi político dos dias de hoje e por ultimo o Mapa Mundi Ptolomáico (1486).

Mapa Mundi segundo os Chineses no Sec. XVIII

Mapa Mundi segundo os Chineses no Sec. XVIII

Mapa Mundi Político

Mapa Mundi Político

Mapa Mundi Ptolomáico (1486)

Mapa Mundi Ptolomáico (1486)

Todos os mapas são diferentes pois definem modelos de domínio diferentes. Um modelo resolve apenas um problema. Um sistema pode ter mais de um domínio e uma empresa (minimamente complexa) obrigatoriamente terá mais de um domínio.

Para desenvolvimento de sistemas, um modelo pode ser um diagrama UML e tudo mais que for necessario para explanar a complexidade do domínio, como fluxos, anotações ou um outro qualquer artefato. O importante é documentar de forma mais clara possivel o que se deseja resolver e como se deve resolver.

Um modelo que não tem evolução junto com a fase de desenvolvimento é um modelo morto, ou seja, não vale de nada. Na fase de desenvolvimento, o modelo deve estar 100% aderente à codificação e a necessidade do cliente, evoluindo e dapatando-se com as mudanças que (com certeza) surgirão no caminho. Por isso que hoje em dia as pessoas ligam desenvolvimento iterativo com DDD.

Para ser iterativo não precisa ser DDD, mas pra ser DDD tem que ser iterativo!

Quem define um domínio é um cara chamado de Domain Expert, que é aquele malandro que conhece de tudo sobre o assunto tratado na empresa, alem de ter uma visão um pouco maior, que pode prever quem pode ser afetado e consultado no decorrer do desenho do dominio.

Normalmente, o arquiteto do sistema senta com o Domain Expert pra começar a desenhar o sistema e, consequente definir o dominio. O Domain Expert tem uma linguagem que é comum no meio que ele vive (empresarial ou corporativo). O arquiteto não deve tentar traduzir o que ele diz para uma linguagem técnica no DDD. Ele deve manter a mesma linguagem – tanto a falada quando a escrita – e “modelar” o dominio, deixando que esta linguagem que permeie todo o desenvolvimento, que é o Evans chama de Ubiquitous Language [UL]. UL não tem tradução ao pé da letra, mas seria algo como Linguagem Onipresente que dá a noção que a linguagem estará presente em qualquer lugar do projeto, seja no código, na documentação, nas anotações, no banco e assim por diante.

Com isso, o Domain Expert tem mais abertura para poder negociar, experimentar diferentes soluções e modelar junto com o arquiteto a melhor saída para o problema. A linguagem é o dia-a-dia do Domain Expert e deve se tornar, tambem, o linguajar de todo o time de desenvolvimento, colocando entendimentos e tirando possiveis erros de entendimento de qualquer integrante.

Bem, este é o inicio. O básico que todos precisam ter em mente e, principalmente, praticar estes conceitos.

Até a próxima!

Comente e Recomende!

:, , , ,
5 comentários para este post:
  1. André

    Aí cara, maneiro, finalmente um texto que fala de maneira clara sobre o que é o DDD. Agora já entendi tudo: DDD é Discagem Direta a Distância!

    Rsrsrs, brincadeiras à parte, texto realmente muito bom. Pq vc não escreve um livro?

    Abraço

  2. Filipe

    Vlw Yoda!!!!!!!!! excelente post! estou esperando o próximo pois esta assunto vai dar Samba!!!! :)

  3. Marcio

    Primeiramente, parabéns pela iniciativa de escrever sobre DDD. Digo isto porque tenho tentado fazer o mesmo e sei o quanto é complicado.

    Gostaria de fazer um comentário a respeito do que você disse sobre DDD ser uma metodologia… Conforme o site http://www.domaindrivendesign.org/resources/what_is_ddd isto não é verdade.

    Tem um trecho que diz “Domain-driven design is not a technology or a methodology. It is a way of thinking and a set of priorities, aimed at accelerating software projects that have to deal with complicated domains.”

    Talvez você devesse rever esta parte do seu artigo.

    Abraços,

    Márcio

  4. Rodrigo Allemand

    Olá Márcio!

    Obrigado pelo comentário e pelo toque. Na verdade houve uma falha de expressão, pois no segundo bullet sobre “o que é DDD” eu deixo claro que “DDD é uma abordagem”. Porem, logo abaixo eu digo “que é uma metodologia criada por Eric Evans”.
    Estou alterando o post!!
    Obrigado e continue acompanhando!

  5. Eduardo Gomes

    Rodrigo,

    Primeiramente, meus parabéns pelo texto, ficou muito bem elaborado. Tenho grande interesse em engressar na carreira de analista de requisitos e fazendio a leitura de suas postagens vejo o que preciso para melhorar. Gostaria de saber se após estas postagens você continuou ou vai continuar até o fim deste projeto modelo, como por exemplo escrever os casos de uso inclusive colocando os esteriótipos.

    Um agrande abraço.

Comente!

Procurando por algo?

Use o campo abaixo para procurar por todo o site:

Ainda não achou? Deixe um comentário ou me mande um email que eu cuido disso!

Minhas indicações!

Alguns blogs que eu recomendo...