Contextos Delimitados, Domínios e Agregados
Tags: ddd, architecture
Published: 2023-07-08 04:08:17

O **Domain Driven Design (DDD)** é uma abordagem de design de software que coloca o foco no domínio do negócio, em vez de apenas na tecnologia. Uma das principais técnicas utilizadas no DDD é o conceito de **contextos delimitados** e **mapeamento de domínios**.

**Contextos delimitados** referem-se a áreas específicas do negócio que têm um significado bem definido e uma fronteira clara. Cada contexto delimitado deve ser tratado como uma unidade autônoma e deve ter sua própria *linguagem ubíqua*, que é uma linguagem comum compartilhada por todas as partes interessadas em um contexto.

O **mapeamento de domínios**, por sua vez, é o processo de mapear as entidades, agregados, eventos e outras construções do domínio para o código que implementa o sistema. Isso ajuda a garantir que o design do software reflita com precisão o domínio do negócio e que o código seja fácil de manter e modificar.

Ao usar contextos delimitados e mapeamento de domínios, os desenvolvedores podem criar sistemas de software que sejam mais fáceis de manter e modificar. Isso ocorre porque cada contexto delimitado é tratado como uma unidade autônoma e independente, o que significa que as mudanças em um contexto não afetarão os outros contextos. Além disso, o mapeamento de domínios ajuda a garantir que o código reflita com precisão o domínio do negócio, o que significa que as mudanças no domínio podem ser facilmente refletidas no código.

Outra vantagem do uso de contextos delimitados e mapeamento de domínios é que isso pode levar a um baixo acoplamento entre os diferentes componentes do sistema. Isso significa que as mudanças em um componente não afetarão os outros componentes, o que torna o sistema mais flexível e escalável.

Em resumo, o uso de contextos delimitados e mapeamento de domínios no Domain Driven Design pode levar a sistemas de software mais fáceis de manter e modificar, com um baixo acoplamento entre os diferentes componentes do sistema. Isso ajuda a garantir que o software reflita com precisão o domínio do negócio e que possa ser facilmente alterado conforme as necessidades do negócio mudam ao longo do tempo.

## Contextos, domínios e agregados

Contextos, domínios e agregados são conceitos fundamentais no Domain Driven Design (DDD), uma abordagem de design de software que tem como objetivo principal criar um software que reflita com precisão o domínio de negócio.

- **Contextos delimitados**: São áreas específicas do domínio de negócio que são tratadas como unidades autônomas e independentes dentro do sistema de software. Cada contexto delimitado possui suas próprias regras de negócio, entidades, agregados, eventos e linguagem específica. Essa divisão em contextos delimitados ajuda a garantir que diferentes partes do sistema sejam tratadas de forma separada e que mudanças em um contexto não afetem outros.

- **Domínio**: É o conjunto de conhecimentos, regras e termos específicos que definem o negócio. No DDD, o foco é entender profundamente o domínio e refleti-lo no código e na estrutura do software. O mapeamento de domínios é o processo de traduzir as construções do domínio, como conceitos, entidades, regras e relacionamentos, para o design e implementação do software.

- **Agregados**: São conjuntos de objetos relacionados que são tratados como unidades coesas dentro do domínio. Cada agregado possui uma raiz de agregado, que é uma entidade que atua como a única entrada para o agregado e encapsula a consistência e a integridade interna do mesmo. Os agregados ajudam a organizar as entidades relacionadas em unidades lógicas e garantem a consistência das operações dentro dessas unidades.

Esses conceitos do Domain Driven Design ajudam a criar um software que reflita com precisão o domínio de negócio e seja mais fácil de entender, modificar e manter.

> "A modelagem de software é uma atividade de design, não uma tradução direta das regras de negócio em código." - Eric Evans