Tabla de Contenidos

03 - Diagramas C4

El modelo C4 describe la arquitectura de un sistema en cuatro niveles: Contexto, Contenedores, Componentes y Código. Cada nivel responde a una pregunta distinta y tiene distinta audiencia.

1. Los cuatro niveles

Nivel Pregunta Audiencia
Contexto ¿Cómo se relaciona el sistema con personas y sistemas externos? Cualquier interesado
Contenedores ¿Qué aplicaciones y almacenes forman el sistema? Técnicos y arquitectos
Componentes ¿Qué módulos componen cada contenedor? Desarrolladores
Código ¿Cómo se organizan las clases? Desarrolladores del componente

Los tres primeros son los más usados; el nivel de código es esencialmente el diagrama de clases del tema anterior.

2. Elementos

3. Contexto

@startuml
!include <C4/C4_Context>

Person(student, "Estudiante", "Consulta el catálogo")
System(biblioteca, "Sistema de biblioteca", "Gestiona libros y préstamos")

Rel(student, biblioteca, "Usa", "HTTPS")
@enduml

El nivel de contexto no entra en detalles internos: solo muestra el sistema, sus usuarios y los sistemas externos con los que habla.

4. Contenedores

@startuml
!include <C4/C4_Container>

Person(student, "Estudiante", "Consulta el catálogo")
System_Boundary(c1, "Sistema de biblioteca") {
  Container(spa, "Aplicación web", "TypeScript", "Interfaz del usuario")
  Container(api, "API REST", "Java, Spring Boot", "Expone la lógica")
  ContainerDb(db, "Base de datos", "MariaDB", "Guarda libros y préstamos")
}

Rel(student, spa, "Usa", "HTTPS")
Rel(spa, api, "Llama a", "HTTPS/JSON")
Rel(api, db, "Lee y escribe", "JDBC")
@enduml

Aquí aparecen las tecnologías y los protocolos. Para el monolito por capas que se construye en 1.º, el diagrama de contenedores muestra aplicación, API y base de datos.

5. Componentes

@startuml
!include <C4/C4_Component>

Component(ctrl, "Controller", "Recibe peticiones HTTP")
Component(svc, "Service", "Reglas de negocio")
Component(repo, "Repository", "Acceso a datos")

Rel(ctrl, svc, "invoca")
Rel(svc, repo, "usa")
@enduml

El nivel de componentes muestra la organización interna de un contenedor, por ejemplo las capas del monolito.

6. Cuándo usar cada nivel

Situación Diagrama
Explicar el sistema a alguien nuevo Contexto
Decidir tecnologías o despliegue Contenedores
Planificar el código de un módulo Componentes
Diseñar o revisar clases Código (diagrama de clases)
No hay que dibujar los cuatro niveles siempre: se elige el nivel que responde a la pregunta que se quiere contestar. Mantener los diagramas actualizados importa más que el detalle.