Uma breve apresentação sobre o que é DDD, seus principais conceitos e pilares.
Desenvolvi este material para uma apresentação para disciplina de Engenharia de Software II, cursada durante o semestre 2024.2, na UFBA.
e vai muito além de implementações técnicas; Não é objetivo dessa apresentação exaurir todos esses pontos, mas abordar seus principais conceitos e alguns de seus pilares.
é uma arquitetura em camadas (embora uma arquiteturas desse tipo seja extremamente útil para isolamento do domínio); Não dita especificamente como seu código ou estrutura de pastas devem estar organizados; Não está restrito a uma linguagem específica; Design, nesse caso, não se refere se quer à elementos visuais dispostos numa tela ou layout da aplicação.
publicado no livro "Domain-Driven Design: Atacando as Complexidades no Coração do Software" (2003); Uma abordagem para modelagem de desenvolvimento de software que centraliza o desenvolvimento na criação um modelo de domínio; Fornece ferramentas para modelagens estratégicas e táticas para atuar no coração do software, o domínio.
para o desenvolvimento de softwares complexos onde buscamos: 1. Nos concentrar no domínio principal; 2. Explorar modelos em uma colaboração criativa entre os profissionais de domínio e osprofissionais de software; 3. Falar numa Linguagem Onipresente dentro de um contexto limitado explicitamente.” (EVANS, 2015)
nos detalhe da implementação [...] destaca o que é estrategicamente importante para o negócio; dividir o trabalho por importância; e como fazer fazer integração da melhor maneira" (Vaughn Vemon, citado por Código Fonte TV)
principal de uma organização; Ajuda a compreender como a organização está organizada e como as diferentes áreas de comunicam; Identifica as atividades core e as atividades de apoio; Auxilia a mapear as delimitações de contextos.
equipes envolvidas (desenvolvedores, POs, domain experts, etc.) possam se comunicar "sem ruídos"; Auxilia no descobrimento e definição das delimitações de contextos; Serve para que os setores possam entender suas dores específicas e também se entenderem entre si.
contexto delimitado terá sua própria intenção de negócio, ainda que aja sobre o mesmo domínio; Cada contexto pode ter sua própria linguagem ubíqua, abordagem arquitetural, etc. “Dentro do limite, todos os termos e frases da Linguagem Ubíqua têm um significado específico” (BRITO, 2019). Colaboração entre devs e domain experts é importante para essa delimitação.
O setor de suporte é responsável por tirar dúvidas de alunos, enquanto o financeiro lida com boletos e afins; Se meu aluno tem uma dúvida sobre financeiro, em qual contexto isso se enquadra: suporte ou financeiro?
como auxiliares (ou subdomínios); Os contextos poderão comunicar-se entre si por meio de algum tipo de “relação”. Exemplo: fornecedores, conformistas , parceiros ou ACLs.
complexidade de técnica (ou ocasional); Pensa-se sobre quais padrões de projeto (design pattern) e arquiteturais serão utilizados; Busca-se isolar domínio da aplicação;
(como entidades, objetos de valor, DTOs, etc.) serão extretamente úteis para esse objetivo; Diferentes contextos podem atuar com diferentes estratégias táticas para suas complexidades específicas.
do que código; Não há receita pronta: o diálogo é essencial!; As estratégias táticas devem entrar em ação após uma visão estratégica do negócio e suas delimitações de contextos: Evitar misturar complexidade técnica com as de negócios. Arquiteturas em camadas e padrões de projeto são artifícios táticos que devem ser usados para isolar o domínio e suas regras de negócios;
é um trabalho que demanda tempo. Assim, o DDD pode ser tão problemático quanto o modelo cascata com relação ao tempo investido? Não necessariamente! Assim como DDD não está ligado diretamente à arquitetura, nada impede de utilizar metodologias ágeis para atuar com DDD; Mas, é inegável a necessidade investir tempo para definições de comunicação, delimitações de contextos, etc.
2009. Disponível em: https://www.infoq.com/articles/ddd- contextmapping/. Acesso em: 17 de dezembro 2024. BRITO, Bruno. Domain-Driven Design - Conceitos básicos. 2019. Disponível em: https://www.brunobrito.net.br/domain-driven- design/. Acesso em: 12 de dezembro de 2024. Dias de Dev. DDD não é sobre arquitetura - O que é Domain-Driven Design. 2022. 14 min. Disponível em: https://www.youtube.com/ watch?v=SNdGV0c40yo. Acesso em: 12 de dezembro de 2024.
Disponível em: https://youtu.be/GE6asEjTFv8? si=PBfNlfLDj6v2KQ9O. Acesso em: 12 de dezembro de 2024. EVANS, Eric. Domain-Driven Design Referência: Sumário de Padrões e Definições. 2015. FullCycle. Intensivo Domain Driven Design (DDD): Os 3 pilares que você precisa saber. 2022. 106 min. Disponível em: https:// www.youtube.com/watch?v=vFZkOyaPK4E. Acesso em: 12 de dezembro de 2024.