Criando Context maps DDD com o VS Code

Domain Driven Design: Criando Context Map com VSCode

Seguindo nossas conversas sobre Domain Driven Design vamos começar a explorar a criação de Context Maps através do VSCode. O artigo Criando Context maps DDD com o VS Code tem por trás os artigos: Domain Driven Design estratégico e Desvendando o Context Map. Ler esses artigos não é obrigatório, mas pode ajudar a entender melhor como chegamos a esse ponto.

Nesse artigo instalaremos as dependências necessárias para que o VSCode possa gerar context maps do DDD, com base numa linguagem de programação particular chamada CML (Context Mappging DSL [Domain Specific Language]). E Assim, vamos mostrar um pouquinho de código e de como gerar seus próprios context maps.

Instalando

Inicialmente vamos considerar que você já possui o VSCode instalado (Link para download) e que já possui certa familiaridade com o produto. Ele também considera um ambiente linux com ubuntu, mas no windows ou mac seguiria passos semelhantes.

Primeiramente é importante entender que o objetivo é instalar o plugin Context Mapper no VSCode. Esse plugin depende de duas estruturas que precisam ser instaladas separadamente: JRE 11, Graphviz e o PlantUML. Vamos começar instalando esses pré-requisitos:

sudo apt install default-jre
java --version    # verificando se tudo está instalado corretamente

sudo apt install graphviz

Após isso, abra VSCode, vá em extensões e procure por Context mapper. Essa estenção dará a possibilidade de você trabalhar com arquivos com a extensão CML, responsável por lidar com os mapas. Procure também pela extensão PlantUML que pode ser útil em alguns casos específicos.

Instalando o context mapper no VS Code

Repositório de referência

Há um repositório de referência para a criação de arquivos CML. É possível trabalhar com exemplos prontos, mas nada substitui a própria documentação oficial em https://contextmapper.org/docs/home/.

Exemplo de context map criado com a ferramenta
Exemplo de context map criado com a ferramenta

O repositório possui exemplos como o que aparece acima, com downstreams, upstreams e um Shared Kernel. Veja a seguir o código fonte desse mapa e o repositório do fork que fizemos: https://github.com/Anselming/context-mapper-examples

ContextMap DDDSampleMap {
	contains CargoBookingContext
	contains VoyagePlanningContext
	contains LocationContext
	
	CargoBookingContext [SK]<->[SK] VoyagePlanningContext
	CargoBookingContext <- LocationContext
	VoyagePlanningContext <- LocationContext
	
}

BoundedContext CargoBookingContext
BoundedContext VoyagePlanningContext
BoundedContext LocationContext

Outros exemplos de mapas de contexto

Exemplo de um context map para uma seguradora
Exemplo de um context map para uma seguradora
Exemplo de um context map focado na gestão dos clientes
Exemplo de um context map focado na gestão dos clientes

Gerando meu próprio context map

Esse é um exemplo de um Context Map escrito em formato .CML para um subdomínio de uma área comercial. O código começa definindo um Context Map chamado “Comercial”, que contém três Bounded Contexts: ClienteContext, TitularContext e GrupoEconomicoContext.

O ClienteContext representa o contexto de negócio que lida com os clientes da empresa. O TitularContext representa o contexto que lida com os titulares dos negócios da empresa e o GrupoEconomicoContext representa o contexto de negócio que lida com o grupo econômico ao qual a empresa pertence.

As linhas seguintes definem o relacionamento entre esses contextos. Primeiro, estabelecemos que há uma relação de associação bidirecional (ou seja, um relacionamento de muitos-para-muitos) entre os contextos ClienteContext e TitularContext.

Em seguida, definimos que o ClienteContext depende do GrupoEconomicoContext. Isso significa que o contexto que lida com os clientes depende do contexto que lida com o grupo econômico da empresa. Finalmente, estabelecemos que o TitularContext também depende do GrupoEconomicoContext, ou seja, o contexto que lida com os titulares também depende do contexto que lida com o grupo econômico. Veja também Padrões do Kubernetes.

No final, definimos cada um dos três contextos de negócio como um Bounded Context, que é uma unidade lógica de negócio que representa um limite de integração e é responsável por gerenciar sua própria lógica e dados de negócio. Veja a seguir


ContextMap Comercial {
	contains ClienteContext
	contains TitularContext
	contains GrupoEconomicoContext
	
	ClienteContext [SK]<->[SK] TitularContext
	ClienteContext <- GrupoEconomicoContext
        TitularContext <- GrupoEconomicoContext
	
}

BoundedContext ClienteContext
BoundedContext TitularContext
BoundedContext GrupoEconomicoContext
Esse é o diagrama gerado por esse código
Esse é o diagrama gerado por esse código

Para gerar esse diagrama no VSCode basta clicar com o botão direito no código e depois em ‘Generate Graphical Context Map’. A ferramenta perguntará qual será o formato a ser gerado: para esse caso em si o formato PNG foi o mais adequado.

Utilizando o Context Mapper no VSCode para gerar um mapa no formato PNG através do comando 'Generate Graphical Context Map'

Conclusão

Finalizando, o artigo Criando Context maps DDD com o VS Code é uma esplanação simples e prática sobre como criar context maps do domain driven design, diretamente no VS Code. É algo realmente muito simples e com vários exemplos para uso prático. Entretanto é necessário um bom entendimento do que está fazendo para que os conceitos estejam bem conectados e faça um real sentido para os projetos de software que estiver fazendo.


Thiago Anselme
Thiago Anselme - Gerente de TI - Arquiteto de Soluções

Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.

Deixe um comentário