- Objetivo
- Desenvolver um conteúdo que demonstre os conceitos fundamentais sobre o DDD, a importância desse conhecimento para o desenvolvimento profissional e pessoal do programador e como esse tópico se relaciona com outros temas importantes na área da computação
- Introdução
- No processo de desenvolvimento de sistemas, o design de software assume um papel importantíssimo ao tentar converter um problema do mundo real, tangível ou não, em software por meio de ferramentas, processos, metodologias e dentre outros métodos. Dentre essas diversas metodologias, assim como escrito na obra de referência [2], encontra-se o DDD, o qual significa Domain-Driven Design, ou seja, Design Dirigido à Domínio. Essa ramificação do design de software, o qual auxilia na estruturação e no desenvolvimento de aplicações, tem mais relação em mostrar ao programador sobre como lidar com a necessidade do cliente e traduzir para uma linguagem de domínio (o conceito central quando se fala de DDD) do que com o código propriamente dito, não havendo muito código e nem descrição de ferramentas, linguagens, frameworks ..., sendo uma maneira de estabelecer uma comunicação clara e padronizada entre todas as partes (grupos de pessoas) envolvidas na criação do sistema.
- DDD (Domain-Driven Design)
- A obra de referência [2] traz uma reflexao interessante acerta do desenvolvimento de software, fazendo uma comparacao {ESCREVER MAIS SOBRE}
- Assim como dito anteriormente, o domínio pode ser entendido como o conceito central no Domain-Driven Design. A obra de referência [1] define o domínio como a área de conhecimento à qual o usuário aplica o software. Consequentemente, o design da aplicação deve se construir em torno desse conceito e das necessidades de quem o utiliza. Nesse contexto, é crucial que a equipe técnica possua um entendimento profundo do domínio para o qual a aplicação é desenvolvida para que se possa criar um modelo computacional aderente à realidade. Para facilitar essa compreensão, existem alguns conceitos muito importantes que auxiliam na estruturação do problema de forma padronizada para os envolvidos.
- O primeiro conceito a ser citado é o de Domain Experts (Experts de Domínio), que são as pessoas que vivenciam, dia a dia, as situações as quais o software tentará auxiliar e que entendem a problemática que a aplicação tenta resolver. Antes de começar a escrever código, o programador deve entender a fundo o problema do cliente para poder tratá-lo de forma fidedigna à realidade e clara para os que estão presentes no processo do desenvolvimento do software. Uma forma de compreender mais à fundo problema, é conversando com os Domain Experts. Dessa forma, torna-se clara a importância da comunicação para o DDD.
- Além disso, outro conceito de suma importância para o Design Dirigido à Domínio é a linguagem ubíqua. Após múltiplas conversas estabelecidas com vários Domains Experts, é possível criar uma linguagem universal na qual todas as pessoas envolvidas na construção do software conseguem entender e se comunicar uns com os outros.
- Linguagem ubíqua
- Linguagem universal em que todas as pessoas que estão envolvidas com a construção do software conseguem conversar com o mesmo vocabulário.
- O expertes têm nomenclaturas específicas para certas entidades que os programadores costumam nomear de outro jeito
- Por exemplo:
- Agregados
- Value Objects
- Eventos de domínio
- Subdomnios (bounded contexts)
- Entidades
- Casos de uso
- Referências bibliográficas: