Documentação ágil com C4 Model

Francisco Junior
Agile Arquitetura
Documentação ágil com C4 Model

Imagine a situação onde você pede a 4 desenvolvedores para desenharem a mesma solução de e-commerce. É muito provável que eles irão gerar 4 desenhos diferentes mas funcionais, cada um com suas particularidades, ícones, setas, formatos, legendas, caixas de texto e tudo mais que for necessário para ajudar no entendimento da solução. 

Apesar de funcionais todos eles precisarão de uma explicação prévia pra abordar o contexto da aplicação, o nível de detalhamento, componentes e tipos de relacionamento. Com isso é natural que venha o sentimento de padronização e para isso temos uma ferramenta robusta que nos dá esse suporte, a UML. Porém a UML tem sua complexidade e devido a isso, provavelmente nenhum dos 4 desenvolvedores criaram um diagrama em UML.

Então precisamos de uma ferramenta que seja fácil de aprender, amigável ao desenvolvedor, que auxiliem na comunicação dentro e fora das equipes de desenvolvimento e produto. Além de auxiliar na integração de novos funcionários, revisões e avaliação de arquiteturas. Assim se descreve o C4 Model, um conjunto de abstrações e diagramas independente de notação e ferramentas. 

Mapeando o código

O C4 Model faz uma analogia a um mapa, como o Google Maps por exemplo, onde podemos dar um zoom in e zoom out por todo o globo, e assim o C4 faz com nosso código. Essa visão possui 4 níveis, que vai de uma visão macro até como componente do software está implementado.

níveis do C4 Model

Context (Level 1)

No nível de contexto, é como dar um passo para trás e olhar para o mundo inteiro em um globo. Você vê as grandes características geográficas, mas sem muitos detalhes específicos. Isso se traduz no entendimento abstrato e amplo do sistema, identificando as principais áreas e seus relacionamentos.

System Context

Containers (Level 2)

Aqui, você define os limites e agrupamentos de alto nível do sistema, como aplicativos ou serviços separados. Aqui as formas e ícones são utilizados para ajudar no entendimento do diagrama, não sendo obrigatório, poderíamos por exemplo criar todo um diagrama só com texto e blocos. É como olhar para um mapa de um país e identificar os estados.

Containers

Components (Level 3)

Ao nível dos componentes, é como analisar um mapa de uma cidade e observar os bairros e monumentos. Este nível descreve os elementos de software reutilizáveis e independentes, como bibliotecas, módulos ou micro serviços, muito semelhante ao diagrama de componentes da UML.

Components

Code (Level 4)

Finalmente, no nível do código, é como focar em uma rua específica e ver os edifícios e lojas. Aqui, você está no nível mais detalhado, examinando o código-fonte real que implementa os componentes individuais do sistema, basicamente um diagrama de classe.

Diagrama de classe

Devemos ter em mente que o C4 é uma ferramenta para comunicar o que pensamos no processo de construção do software, então você não precisa desenhar os 4 níveis, apenas diagrame o que agrega valor.

Abstrações

O C4 Model é uma ferramenta abstraction-first, isso por que abstrações ajudam a simplificar a representação do sistema e a medida que avançamos nos níveis de abstração, mais detalhes técnicos são inclusos. Para construir isso usamos os seguintes elementos:

  • Pessoas: Pessoas são representações de usuários ou sistemas que utilizam seu software.
  • Sistema: Software System é o maior nível de abstração que descreve algo de valor para o usuário. Podendo ser o próprio software que está desenvolvendo ou alguma outra aplicação que possua dependência com ele.
  • Container: Apesar do nome containers não fazemos relação com o docker. Um container representa uma aplicação ou armazenamento de dados. Aqui podemos representar nosso back-end, front-end, banco de dados, buckets, service bus, file system, scripts… tudo aquilo que é necessário para manter o sistema de pé.
  • Componentes: No mundo de desenvolvimento componente pode ter muitos significados, mas nesse contexto ele representa os componentes do nosso código, como uma classe, interface e DLLs. No C4 model componentes são publicados de forma independente.

Conclusão

O C4 é uma ótima ferramenta para transmitir e documentar arquiteturas, sejam em times pequenos ou grandes sua simplicidade auxilia no bom entendimento do desenvolvedor ou alguma parte interessada. A manutenibilidade é outro ponto favorável, pois existem várias ferramentas desde drag’n drop até texto que ajudam na manutenção por um longo tempo, particularmente gosto do draw.io e o structurizr.

Fonte: https://c4model.com

Compartilhe esse post