🧩 Exercícios: Modelo C4 e Arquitetura como Código em Markdown
Extra Documentação Técnica com Markdown • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 8.1 — Diagrama de Contexto de Sistema (C4 Nível 1) em Mermaid
Contexto: Construir um diagrama de contexto C4 modelando a interação de um Cliente Bancário com o Sistema de Internet Banking e dois sistemas externos (Mainframe Legado e Gateway de E-mails).
Requisitos de Execução:
- Declarar
C4Context. - Adicionar o ator
Person(cliente, "Cliente do Banco", "Correntista da instituição"). - Adicionar o sistema de fronteira
System(banking, "Internet Banking", "Permite transferências e consultas"). - Conectar os elementos usando
Rel(...).
Resultado Esperado
```mermaid
C4Context
title Diagrama de Contexto do Sistema Bancário
Person(cliente, "Cliente do Banco", "Correntista da instituição")
System(banking, "Internet Banking", "Permite transferências e consultas")
System_Ext(email, "Gateway de E-mail", "Serviço externo de envio de notificações")
Rel(cliente, banking, "Utiliza", "HTTPS")
Rel(banking, email, "Dispara avisos através de", "SMTP")
```
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_1_SeuNome.md - Envie na tarefa:
Atividade Cap 08 - Modelo C4 e Arquitetura como Código
🔑 Gabarito de Código & Solução Comentada
```mermaid
C4Context
title Diagrama de Contexto do Sistema Bancário
Person(cliente, "Cliente do Banco", "Correntista da instituição")
System(banking, "Internet Banking", "Permite transferências e consultas")
System_Ext(email, "Gateway de E-mail", "Serviço externo de envio de notificações")
Rel(cliente, banking, "Utiliza", "HTTPS")
Rel(banking, email, "Dispara avisos através de", "SMTP")
```
Comentário: O Nível 1 (Contexto) do Modelo C4 oculta detalhes de tecnologia internos para comunicar o escopo global a stakeholders técnicos e de negócio.
🎯 Nível 2: Prática
Problema 8.2 — Diagrama de Containers C4 (Nível 2) de uma Aplicação Web
Crie um diagrama de containers C4Container detalhando a aplicação: Single Page Application (React), API Gateway (Go), Microsserviço de Contas (Java/Spring) e Banco de Dados (PostgreSQL).
🔑 Gabarito de Código & Solução Comentada
```mermaid
C4Container
title Diagrama de Containers da Plataforma de Pagamentos
Person(user, "Usuário Final")
Container(spa, "Single-Page App", "React, TypeScript", "Interface no navegador")
Container(api, "API Gateway", "Go, Gin", "Roteamento e Autenticação JWT")
Container(db, "Banco de Dados", "PostgreSQL", "Armazenamento relacional ACID")
Rel(user, spa, "Acessa", "HTTPS")
Rel(spa, api, "Faz chamadas de API", "JSON/HTTPS")
Rel(api, db, "Lê e grava dados", "TCP/SSL")
```
🎯 Nível 3: Integração
Problema 8.3 — Arquitetura Declarativa com a DSL D2
Escreva um arquivo de especificação arquitetural utilizando a sintaxe da moderna DSL D2 (declarative diagramming) modelando uma esteira de mensageria com Apache Kafka.
🔑 Gabarito de Código & Solução Comentada
# arquitetura_mensageria.d2
produtor: Produtor de Eventos {
shape: rectangle
style.fill: "#e1f5fe"
}
kafka: Cluster Apache Kafka {
topico_pedidos: Tópico 'pedidos-criados'
topico_pagamentos: Tópico 'pagamentos-aprovados'
}
consumidor: Microsserviço de Faturamento {
shape: rectangle
style.fill: "#e8f5e9"
}
produtor -> kafka.topico_pedidos: Publica evento de checkout
kafka.topico_pedidos -> consumidor: Consome para emitir nota
🎯 Nível 4: Desafio
Problema 8.4 — Pipeline de CI para Validação de Diagramas com Mermaid CLI (mmdc)
Construa uma configuração de GitHub Actions que examine arquivos .md alterados em um Pull Request e execute o compilador mermaid-cli (@mermaid-js/mermaid-cli) em modo headless para barrar PRs com diagramas sintaticamente inválidos.
🔑 Gabarito de Código & Solução Comentada
# .github/workflows/valida_diagramas.yml
name: Validação de Diagramas Mermaid
on: [pull_request]
jobs:
check-mermaid:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Instalar Mermaid CLI
run: npm install -g @mermaid-js/mermaid-cli
- name: Validar Sintaxe dos Arquivos Markdown
run: |
for f in $(find . -name "*.md"); do
echo "Checando integridade de diagramas em: $f"
# O mmdc falhará o exit code caso o parsing falhe
mmdc -i "$f" -o /tmp/check.png --puppeteerConfigFile .puppeteer.json || exit 1
done