Domain-Driven Design (DDD) é uma abordagem para o desenvolvimento de software que coloca o domínio (o problema que o software está tentando resolver) no centro do processo de design. Aqui está um resumo dos principais conceitos:
O domínio refere-se ao assunto ou área de interesse para o qual o software está sendo desenvolvido. É essencial compreender o domínio para criar soluções eficazes.
Os Domain Experts são especialistas no domínio que ajudam a entender as complexidades e os detalhes necessários para o desenvolvimento do software.
A conversa e a linguagem ubíqua são práticas para garantir que todos os envolvidos no projeto (desenvolvedores, clientes, especialistas, etc.) utilizem a mesma terminologia e compreendam o domínio da mesma forma. Isso promove uma comunicação mais clara e eficaz.
- Usuário: A pessoa que utiliza o sistema.
- Client: O cliente que solicita ou paga pelo desenvolvimento do sistema.
- Fornecedor: Entidades que fornecem recursos ou serviços relacionados ao sistema.
- Atendente: Pessoa que lida com as necessidades ou suporte do usuário.
- Barman: Um exemplo específico, pode ser um papel dentro de um sistema mais amplo, dependendo do domínio.
Agregados são grupos de objetos relacionados que são tratados como uma única unidade para garantir a consistência das mudanças no sistema.
Value Objects são objetos que não têm identidade própria e são definidos apenas pelos seus atributos. Eles são imutáveis e usados para descrever aspectos do domínio.
Eventos de domínio são eventos que têm significado no domínio e representam algo que ocorreu no sistema.
Os subdomínios ou Bounded Contexts são áreas distintas dentro de um sistema que têm seus próprios modelos e lógica. Cada subdomínio é separado para evitar a complexidade e permitir um design mais coeso.
Entidades são objetos que têm uma identidade distinta e são capazes de mudar e persistir ao longo do tempo.
Os casos de uso descrevem como os usuários interagem com o sistema para alcançar objetivos específicos.
Este guia fornece uma visão geral dos conceitos fundamentais de DDD e como eles se relacionam para criar um software que é alinhado com as necessidades e complexidades do domínio.