.NET - Conceitos DDD para iniciantes - II


Vamos continuar apresentando alguns conceitos do Domain Drive Design (DDD) para quem esta iniciando e deseja conhecer melhor essa abordagem.

Na sequência da primeira parte do artigo vamos continuar apresentando conceitos usados na abordagem DDD.

A seguir vou apresentar o que pode ser entendido como sendo os pilares do DDD.

1- Strategic Design ou Modelagem Estratégica

O objetivo principal da modelagem estratégica é definir 3 conceitos importantes do DDD em conjunto com a equipe do projeto:

  1. Ubiquitous Language - É a linguagem falada no dia a dia do negócio e que usa as terminologias do negócio; É a linguagem falada pelo time de desenvolvimento e pelas pessoas envolvidas em um contexto delimitado do negócio;
     
  2. Bounded Context - Um Bounded Context ou Contexto Delimitado é um limite conceitual no qual um modelo de domínio é aplicável; Cada contexto possui suas responsabilidades e sua própria linguagem Ubíqua;

       

  1. Context Maps - Os Context Maps ou Mapas de Contextos permitem identificar o relacionamento entre os Bounded Contexts e as equipes responsáveis por cada contexto.

    O mapa de contexto é um documento, uma imagem, um rascunho cujo objetivo é facilitar o entendimento dos contextos da aplicação nos ajudando a compreender o projeto como um todo. Podemos ter diversos tipos de Context Maps com base no tipo de relacionamento entre os Bounded Contexts.

Os principais tipos de relacionamentos entre os Bounded Context são:
  1. Shared Kernel - Indica que vários domínios são compartilhados;
  2. Customer-Supplier-Development - Define um relacionamento entre Customer e Supplier que afetam os contextos relacionados;
  3. Conformist - Indica a conformidade com o relacionamento;
  4. Partner - Indica uma dependência mútua entre os contextos;
  5. Anticorruption Layer - Indica uma camada para proteger o contexto de modificações;

Nota: Os modelos onde os limites são inconsistentes são chamados de Big ball of mud (A grande bola de lama)

2- Tatical Design ou Modelagem Tática

A modelagem tática esta relacionada com os blocos de construção da DDD podendo ser Entidades, Serviços, Repositórios, Value Objects (Objetos de Valor), Agreggates (Agregados), Events, Factories, etc., sendo um conjunto de recursos técnicos usados na construção do Modelo de domínio do negócio.

Aplicamos a modelagem tática dentro de um Contexto Delimitado usando os padrões dos blocos de construção do DDD. Sendo que um dos padrões mais importantes do projeto tático são os Agregados ou Aggregates.

A seguir temos um resumo do conceito sobre os principais blocos de construção usados na DDD: (origem)

3- Architecture Design

Refere-se aos estilos de arquitetura usado na implementação do DDD como : Hexagonal, Onion, Layered, CQRS ,etc.

Uma das grandes vantagens do DDD é que ele não requer o uso de nenhuma arquitetura específica. Ao implementar o DDD, você terá que definir uma arquitetura em algum momento, e você é livre para adotar qualquer tipo de arquitetura que faça sentido para você e pode até usar diferentes tipos de arquitetura.

Assim podemos ter em cada Contexto Delimitado a implementação de uma arquitetura específica.

A seguir temos um breve resumo dos principais modelos e padrão de arquitetura que podem ser usados na implementação do DDD:

A arquitetura em camadas é sem dúvida a arquitetura mais popular e mais usada pelos desenvolvedores de hoje.
Camadas são uma forma de separação de responsabilidades, o que significa que cada camada tem uma responsabilidade específica.

Uma camada superior pode acessar uma camada inferior, mas uma camada inferior nunca pode acessar uma camada superior.

A arquitetura hexagonal também é conhecida como portas e adaptadores, onde portas são interfaces e adaptadores são implementações, é um tipo de arquitetura em que a camada de domínio é enfatizada.

De uma maneira prática, podemos entender como uma arquitetura em camadas onde o 'Princípio da Inversão da Dependência' foi aplicada para que a camada do domínio se tornasse a camada central que não 'depende' de qualquer outra camada.

Representational State Transfer, abreviado como REST, é um estilo de arquitetura para projetar arquiteturas de software distribuídos, o REST define um conjunto de propriedades e restrições baseadas em HTTP e usa todo o potencial dos verbos HTTP.

A Segregação de Responsabilidade por Consulta de Comando, ou CQRS, é uma arquitetura de software padrão que separa a leitura e a gravação dos dados, onde a Consulta é para leitura e o Comando para a gravação de dados.

A arquitetura orientada a eventos (Event Driven Architecture) é uma arquitetura de software, na qual existem Produtores (Pub) de eventos que geram um fluxo de eventos e Consumidores (Sub) de eventos que ouvem eventos.

Temos assim uma brevíssima descrição dos 3 principais pilares da DDD e de seus constituintes de forma a que você conheça parte dos fundamentos do DDD.

E estamos conversados...

"Sede, pois, imitadores de Deus, como filhos amados;
E andai em amor, como também Cristo vos amou, e se entregou a si mesmo por nós, em oferta e sacrifício a Deus, em cheiro suave."
Efésios 5:1,2

Referências:


José Carlos Macoratti