DEV Community

Pedro Pietroluongo
Pedro Pietroluongo

Posted on • Edited on

6

O Método de Documentação C4Model e sua aplicação com PUML

TL;DR: O C4Model é uma técnica de documentação de arquitetura de software que permite representar sistemas complexos de maneira hierárquica e fácil de entender. Neste artigo, exploraremos como usar o PlantUML para criar diagramas do C4Model e apresentaremos exemplos práticos.

Introdução

O C4Model é uma abordagem para documentação de arquitetura de software que se concentra na comunicação entre as partes interessadas, fornecendo uma visão hierárquica e simplificada do sistema. Composto por quatro níveis de abstração - Contexto, Contêiner, Componente e Código - o C4Model facilita a compreensão da arquitetura e promove a colaboração entre os membros da equipe. Neste artigo, discutiremos como utilizar o PlantUML (PUML) para criar diagramas do C4Model e forneceremos exemplos práticos.

1. O C4Model e o PlantUML

O C4Model é baseado em quatro níveis de abstração que representam diferentes perspectivas do sistema:

  1. Contexto: Mostra a relação do sistema com os usuários e outros sistemas.
  2. Contêiner: Descreve os serviços, aplicativos e bancos de dados que compõem o sistema.
  3. Componente: Detalha os componentes individuais e suas interações dentro de um contêiner.
  4. Código: Representa a implementação real do componente em termos de classes, interfaces e outras construções de programação.

O PlantUML é uma ferramenta de código aberto que permite criar diagramas UML a partir de texto simples. Com sua sintaxe intuitiva, o PlantUML é ideal para criar diagramas do C4Model.

2. Exemplos de diagramas do C4Model com PlantUML

A seguir, apresentamos exemplos de diagramas do C4Model utilizando a sintaxe do PlantUML.

2.1 Diagrama de Contexto

@startuml
!define C4_Context https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Context.puml
!includeurl C4_Context.puml

System(systemAlias, "Sistema Exemplo", "Sistema para ilustrar o C4Model")

Person(userAlias, "Usuário", "Usuário do sistema")

System_Ext(system2Alias, "Sistema Externo", "Outro sistema relacionado")

Rel(userAlias, systemAlias, "Interage com")
Rel(systemAlias, system2Alias, "Se comunica com")

@enduml
Enter fullscreen mode Exit fullscreen mode

2.2 Diagrama de Contêiner

@startuml
!define C4_Container https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Container.puml
!includeurl C4_Container.puml

System_Boundary(systemAlias, "Sistema Exemplo") {
  Container(container1Alias, "Aplicativo Web", "JavaScript, Angular", "Aplicativo web para usuários")
  Container(container2Alias, "API", "Java, Spring Boot", "API RESTful")
  ContainerDb(container3Alias, "Banco de Dados", "MySQL", "Armazena dados do sistema")
}

Person(userAlias, "Usuário", "Usuário do sistema")

Rel(userAlias, container1Alias, "Acessa")
Rel(container1Alias, container2Alias, "Consome")
Rel(container2Alias, container3Alias, "Lê e grava dados")

@enduml
Enter fullscreen mode Exit fullscreen mode

2.3 Diagrama de Componente

@startuml
!define C4_Component https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Component.puml
!includeurl C4_Component.puml

Container_Boundary(container2Alias, "API - Java, Spring Boot") {
Component(component1Alias, "Controller", "Spring MVC Rest Controller", "Gerencia solicitações de API")
Component(component2Alias, "Service", "Spring Service", "Gerencia a lógica de negócio")
Component(component3Alias, "Repository", "Spring Data JPA Repository", "Gerencia o acesso aos dados")
}

Rel(component1Alias, component2Alias, "Chama")
Rel(component2Alias, component3Alias, "Utiliza")

@enduml
Enter fullscreen mode Exit fullscreen mode

3. Conclusão

O C4Model é uma abordagem de documentação de arquitetura de software que permite representar sistemas complexos de maneira hierárquica e fácil de entender. Ao utilizar o PlantUML, é possível criar diagramas do C4Model de forma eficiente, simplificando a comunicação entre os membros da equipe e facilitando a colaboração.

Referências:

  1. Simon Brown. "C4 model - Context, Containers, Components, and Code". Disponível em: https://c4model.com/.
  2. PlantUML. "PlantUML - Open-source tool that uses simple textual descriptions to draw UML diagrams". Disponível em: https://plantuml.com/.
  3. Ricardo Niepel. "C4-PlantUML - PlantUML sprites, macros, and other includes for C4 diagrams". Disponível em: https://github.com/RicardoNiepel/C4-PlantUML.

Nota: Os exemplos de código deste artigo são baseados no repositório C4-PlantUML de Ricardo Niepel.

Imagine monitoring actually built for developers

Billboard image

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay