Visualize a arquitetura do seu sistema com C4 Model
Tags: c4model, arquitetura, diagramas, portugues
Published: 2021-06-30 13:34:19

# C4 Model

website: https://c4model.com/
author: Simon Brown

Inspirado em UML e 4+1 Model, foi criado e melhorado ao longo do tempo para ajudar a visualizar a arquitetura de sistemas e aproximar o modelo do sistema com o código.

## Principais lemas

- Foco nas estruturas estáticas (componentes)
- Abstrações e não notações (mapas)
- Engenharia e não arte, não use visio use plantuml

## Quem usa UML?
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ea463zck8mg7arckxjyh.png)
 
- Desculpas
	- "Nem todos sabem UML no time"
	- "Vou parecer velho"
	- "Ferramentars ruins"
	- "Muito detalhado"
	- "É uma bela forma de perder tempo"
	- "Agile não precisa documentar"
	- "O valor ta na conversa", daí a conversa é só sobre ficar até mais tarde...
	- "O valor tá no código", daí vc olha o código e...

----
Com a chegada das metodologias ágeis as pessoas tem buscado simplificar e usar formas mais simples de modelagem.

----

- Use um quadro branco!
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/848mw81pec7jh5xat4z0.png)
 
----
- O problema é que faltou tempo e/ou ferramenta adequada!
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a4s6rcg29xtohpp8rqrg.png)

----
- Problemas dos diagramas atuais
	- Tamanhos, cores diferentes
	- Falta de legenda e descrição
	- Não padronização
	- Abreviações
	- Falta de títulos


## Por quê?
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vi5hbf2uw6tqmaf6my9y.png)

- Troca de pessoas, rotatividade = informação pro ralo
- Visualização!
- Peça para um arquiteto desenhar a sua casa, o que terá? Sim, a planta baixa da sua casa.
- Você, uma pessoa que não é formada em arquitetura conseguirá entender todo contexto, principais idéias da planta. Consegue se localizar e localizar portas, janelas etc.

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vpxzfj7jdma1igeks6hq.png)
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bttgmxh5mfrnoh6jo6we.png)
  

----
		"Boa comunicação = times melhores"
		

## Público

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mvjsdodw0wmb7p5ixqy0.png)
[Sam Brinson](https://www.sambrinson.com/sharing-knowledge/different-minds/)

- Temos que ter em mente que o público de nossos diagramas pode ser amplo, desde um presidente e um diretor da companhia até seu colega que acabou de entrar na firma.

----

## Mapas

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dkogzpcvem2bpe70vjra.png)

Olhe o mapa da sua cidade ou imagine ele.
O que vai notar?

- Igrejas
- Hospitais
- Ferrovias
- Estradas
- Estações de metrô
- Museus

Olhe o mapa de outra cidade e perceba como as mesmas abstrações estarão presentes, apenas com notações diferentes (fontes, linhas cores, formatos)

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a4ev6yesik1xcleik5m9.png)
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqnhchjn17a5k3vhyqiy.png)
  

## Como funciona?

### Abstrações hierárquicas / Agrupamentos

 ![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9pduu9hug5luqas60fr0.png) 
				  
- Contamos uma história linear de C1 até C4 , ou seja a história continua ao dar o zoom.

- O C4 Model é uma estrutura estática, uma vez definido pode-se por exemplo criar outras documentações mais específicas caso necessário, como: diagramas de sequência, ER, BP, etc.


### 4Cs

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/daimx9ueg0ddsa3wvaoj.png)
 

C1 - Contexto                                                                           | Overview | Continente
C2 - Containers                                                                        | Overview | Estado
C3 - Componentes                                                                   | Zoom       | Cidade
C4 - Código                                                                              | Detalhes  | Foto da rua

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kndlfm80ldn2c0v4i89f.png)

!!! C4 não é recomendado devido ao detalhamento, pode ser usado por exemplo com uma ferramenta que gere essa doc

### Notação
- Use títulos!
- Coloque descrições do que o sistema faz!
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qz75xudnbflndefdx122.png)
 
 

## Quando usar?
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0chois3jlrm622ps7sh.png)
 

- Se seu diagrama tem mais de ~20 elementos já pode ser melhor dividir nas camadas do C4 para melhor entendimento

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l2qy61qcxddu10hxxao3.png)
 

## Exemplo
Level 1 - Contexto
Sistemas, usuários e dependências
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i4hsbnleqnkly1qo3eq4.png)

Level 2 - Containers
Arquitetura geral e escolhas de tecnologias
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ikbxky03mtdbawc7kxp.png)

Level 3 - Componentes
Componentes lógicos e interações
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y6ftgfa2mc0tl4yo1vrt.png)

Level 4 - Classes
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4nxw2uyfgknucwqaszir.png)

----
Visão geral (time), é um L1 de Contexto sem foco em apenas um sistema:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v009jsya7nepmy1voo33.png)

## Mais
https://www.youtube.com/watch?v=x2-rSnhpw0g