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.
Sumário
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.
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/.
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
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
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.
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.
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.