El modelo C4: Visualización de la arquitectura de software como “Google Maps para el código”

“El modelo C4 ayuda a los equipos a comunicar la arquitectura de software de forma clara, consistente y con el nivel adecuado de detalle.”
— Simon Brown

El modelo C4 (Contexto, Contenedores, Componentes, Código) es un marco jerárquico y ampliable para documentar la arquitectura de software. Está diseñado para ser amigable para desarrolladorescompatible con Agile, y legible — superando los diagramas desordenados y estáticos de “cajas y líneas”.

Permite a los equipos:

  • Comunicar la arquitectura de forma efectiva entre partes interesadas técnicas y no técnicas.

  • Mantener documentación consistente y controlada por versiones.

  • Enfocarse en lo que importa en cada nivel de abstracción.


🔍 Abstracciones centrales del modelo C4

The Ultimate Guide to C4 Model Visualization with Visual Paradigm's AI Tools - ArchiMetric

Nivel Concepto Propósito
Nivel 1: Contexto Sistema y personas ¿Quién utiliza el sistema? ¿Cómo interactúa con su entorno?
Nivel 2: Contenedores Unidades desplegables ¿Cuáles son los componentes técnicos de alto nivel (aplicaciones, bases de datos, APIs)?
Nivel 3: Componentes Agrupaciones lógicas ¿Cómo está estructurada la funcionalidad dentro de un contenedor?
Nivel 4: Código (Opcional) Clases, interfaces, métodos Detalles de implementación — típicamente generados por IDEs.

✅ Principio claveAumenta solo cuando sea necesario.Empieza de forma amplia, luego profundiza.


🧩 Elementos y relaciones clave

Elemento Descripción Ejemplo
Persona Actor humano o usuario ClienteAdministradorAPI de terceros
Sistema de software Un sistema que entrega valor Sistema de banca en línea
Contenedor Unidad desplegable (en tiempo de ejecución o desplegable) Aplicación web, microservicio, base de datos, función sin servidor
Componente Grupo lógico de funcionalidades relacionadas Módulo de autenticaciónProcesador de pagosFachada de mainframe
Relaciones Conexiones en lenguaje claro entre elementos "Utiliza""Llama""Lee/Escribe""Depende de"

💬 Usa lenguaje natural para relaciones. Evita términos ambiguos como “se conecta con”.


📊 Niveles del modelo C4 con ejemplos de PlantUML

📌 Todos los ejemplos usan el biblioteca C4-PlantUML para consistencia y automatización.


1. Diagrama de contexto del sistema (Nivel 1)

¿Quién utiliza el sistema? ¿Con qué sistemas externos interactúa?

🎯 Público objetivo: Partes interesadas no técnicas, dueños de producto, ejecutivos.

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_WITH_LEGEND()
título Diagrama de contexto del sistema para banca en línea

Persona(cliente, "Cliente", "Un cliente de banca personal")
Sistema(sistema_bancario, "Sistema de banca en línea", "Permite a los clientes ver sus cuentas y realizar pagos")
Sistema_Ext(mainframe, "Sistema de banca de mainframe", "Almacena todos los datos centrales de banca")

Rel(cliente, sistema_bancario, "Utiliza")
Rel_R(sistema_bancario, mainframe, "Obtiene información de cuenta desde")
@enduml

✅ Enfoque: Alcance y límites del sistema.


2. Diagrama de contenedores (Nivel 2)

¿Cuáles son los principales componentes técnicos y sus tecnologías?

🎯 Público objetivo: Arquitectos, desarrolladores, ingenieros de DevOps.

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

Person(customer, "Cliente", "Un cliente de banca personal")
System_Boundary(c1, "Sistema de banca en línea") {
    Container(web_app, "Aplicación web", "Java, Spring MVC", "Entrega contenido al usuario")
    Container(api_app, "Aplicación de API", "Java, Spring Boot", "Proporciona funcionalidad mediante JSON/HTTPS")
    ContainerDb(db, "Base de datos", "Base de datos relacional", "Almacena datos del usuario")
}

System_Ext(mainframe, "Sistema de mainframe bancario", "Almacena todos los datos centrales de banca")

Rel(customer, web_app, "Utiliza", "HTTPS")
Rel(web_app, api_app, "Llama", "JSON/HTTPS")
Rel(api_app, db, "Lee/Escribe", "JDBC")
Rel(api_app, mainframe, "Utiliza", "XML/HTTPS")
@enduml

✅ Enfoque: Elección de tecnologíaslímites de despliegueflujos de datos.


3. Diagrama de componentes (Nivel 3)

¿Cómo está estructurada internamente la Aplicación de API?

🎯 Público objetivo: Desarrolladores, líderes técnicos, líderes de equipo.

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title Diagrama de componentes para la Aplicación de API en banca en línea

Container(api_app, "Aplicación de API", "Java, Spring Boot")
ContainerDb(db, "Base de datos", "Base de datos relacional")
System_Ext(mainframe, "Sistema de mainframe bancario")

Container_Boundary(api_boundary, "Aplicación de API") {
    Component(sign_in, "Controlador de inicio de sesión", "Controlador MVC", "Permite a los usuarios iniciar sesión")
    Component(security, "Componente de seguridad", "Spring Security", "Gestiona la autenticación")
    Component(mainframe_facade, "Fachada de mainframe", "DAO", "Comunica con el mainframe")

    Rel(sign_in, security, "Utiliza")
    Rel(security, db, "Lee/Escribe")
    Rel(sign_in, mainframe_facade, "Utiliza")
    Rel(mainframe_facade, mainframe, "Utiliza")
}
@enduml

✅ Enfoque: Estructura internaresponsabilidadesdependencias.


4. Diagrama de código (Nivel 4 – Opcional)

Detalles de implementación: clases, interfaces, métodos.

🎯 Público objetivo: Desarrolladores, revisores de código.

⚠️ No se recomienda dibujarlo manualmente — mejor generado mediante IDEs (por ejemplo, IntelliJ, VS Code) utilizando herramientas de diagramación automática.

Ejemplo (simplificado):

@startuml
class SignInController {
  +signIn()
  +validateCredentials()
}

class SecurityComponent {
  +authenticate()
  +generateToken()
}

class MainframeFacade {
  +fetchAccountData()
  +sendTransaction()
}

SignInController --> SecurityComponent : Usa
SecurityComponent --> Database : Lee/Escribe
MainframeFacade --> MainframeAPI : Usa
@enduml

✅ Mejor práctica: Automatiza este nivel utilizando herramientas como PlantUML + complementos de IDE.


✅ Mejores prácticas y principios clave

Principio ¿Por qué es importante?
Perfeccionamiento iterativo Comienza con el contexto → añade detalle solo cuando sea necesario. Evita documentar en exceso.
Diagramas como código Almacena .puml archivos en Git. Permite el control de versiones, CI/CD, colaboración y diferencias.
Incluye una leyenda Explica siempre los símbolos, colores y convenciones (por ejemplo, Rojo = ExternoAzul = Interno).
Enfóquese en la comunicación Los diagramas debeninformar, no impresionar. Simplicidad > completitud.
Use diagramas de «Mapa del Sistema» Muestre cómo múltiples sistemas interactúan a través de una organización.
Use diagramas «Dinámicos» Agregue diagramas de secuencia para mostrar el comportamiento en tiempo de ejecución (por ejemplo, flujo de inicio de sesión).
Defina el alcance de forma responsable Un diagrama de componentes debe tener un alcancedentro de un solo contenedor. ¡No mezcle contenedores!

🛠 Herramientas y ecosistema

  • PlantUML + Biblioteca C4-PlantUML – Gratis, basado en texto, controlado por versiones.

  • Visual ParadigmLucidchartDraw.io – Soporta C4 mediante plantillas.

  • Complementos para IDE – Genere automáticamente diagramas C4 a partir del código (por ejemplo, IntelliJ + complemento PlantUML).

  • Integración CI/CD – Genere diagramas como parte de las pipelines de compilación.


📚 Referencias y lecturas adicionales


🎯 Pensamiento final

El modelo C4 no trata de crear diagramas perfectos — se trata de contar la historia correcta al nivel adecuado de detalle.

Úsalo para:

  • Integrar a nuevos desarrolladores más rápido.

  • Alinear a los equipos sobre los límites del sistema.

  • Comunicarse con los interesados sin jerga.

  • Hacer evolucionar la documentación de arquitectura junto con el código.


✅ Consejo profesional: Comienza con un Contexto del sistema diagrama. Luego, amplía el modelo a medida que evolucionen las necesidades de tu equipo — como construir un mapa una calle a la vez.


Házmelo saber si te gustaría:

  • Una versión descargable en PDF de esta guía

  • Un repositorio de plantillas con diagramas C4 en Git

  • Scripts de automatización para generar diagramas C4 a partir del código

  • Una comparación con otros modelos (por ejemplo, Vista 4+1, Zachman)

¡Feliz diagramación! 🖥️📘