Desde la visión general hasta el código: Una guía para principiantes sobre la visualización de la arquitectura de software con el modelo C4
Introducción
La documentación de la arquitectura de software a menudo resulta abrumadora. Los desarrolladores o crean diagramas excesivamente complejos que nadie entiende, o omiten completamente la documentación, dejando a los equipos perdidos en un laberinto de código.
Entren en el modelo C4—un enfoque simple y jerárquico para la visualización de la arquitectura de software creado por Simon Brown. Piénselo como Google Maps para su software: comienza con una vista general del mundo y avanza gradualmente hasta ver calles y edificios individuales.

Esta guía paso a paso le acompañará a través de los cuatro niveles del modelo C4 con ejemplos prácticos, fragmentos de código PlantUML y orientación sobre el uso de herramientas modernas como Visual Paradigm para crear diagramas de arquitectura profesionales que realmente ayuden a su equipo.
🎯 Comprendiendo el modelo C4 a través de un ejemplo del mundo real
Construyamos la documentación para “PayQuick”—una plataforma de pagos en línea moderna que permite a los usuarios enviar dinero, pagar facturas y gestionar tarjetas. Crearemos diagramas para cada nivel del modelo C4.
🗺️ Nivel 1: Diagrama de contexto del sistema
Lo que muestra
La vista general a 30.000 pies de su sistema en su entorno.
Ejemplo de PayQuick
Actores:
-
Cliente personal
-
Comerciante
-
Sistemas bancarios
-
Pasarela de SMS
Relaciones:
-
Los clientes envían dinero
-
Los comerciantes reciben pagos
-
El sistema se integra con bancos externos
-
El sistema envía notificaciones por SMS
Código C4-PlantUML

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
title PayQuick - Diagrama de contexto del sistema
Person(customer, "Cliente personal", "Utiliza la aplicación para enviar dinero y pagar facturas")
Person(merchant, "Comerciante", "Acepta pagos de clientes")
System_Boundary(payquick, "Plataforma PayQuick") {
System(payquick_system, "PayQuick", "Permite a los clientes realizar pagos y transferencias")
}
System_Ext(bank_system, "Red bancaria", "Procesa transferencias entre bancos", $tags="external")
System_Ext(sms_gateway, "Twilio SMS", "Envía notificaciones de transacciones", $tags="external")
System_Ext(email_service, "SendGrid", "Envía recibos por correo electrónico", $tags="external")
Rel(customer, payquick_system, "Envía dinero, paga facturas, visualiza transacciones")
Rel(merchant, payquick_system, "Recibe pagos, emite reembolsos")
Rel(payquick_system, bank_system, "Procesa transferencias mediante", "API")
Rel(payquick_system, sms_gateway, "Envía OTP y notificaciones mediante", "HTTPS")
Rel(payquick_system, email_service, "Envía recibos mediante", "SMTP")
LAYOUT_WITH_LEGEND()
@enduml
Consejo de Visual Paradigm
En Visual Paradigm, utilice el Asistente de IA para generar diagramas iniciales de contexto del sistema describiendo su sistema en lenguaje natural: “Cree un diagrama de contexto del sistema para una plataforma de pagos con clientes, comerciantes e integraciones bancarias.”
📦 Nivel 2: Diagrama de contenedores
Lo que muestra
Las principales decisiones tecnológicas y cómo interactúan.
Ejemplo de PayQuick
Contenedores:
-
Aplicación móvil (iOS/Android)
-
Aplicación web (React)
-
Aplicación de API (Spring Boot)
-
Base de datos (PostgreSQL)
-
Cola de mensajes (RabbitMQ)
-
Caché (Redis)
Código C4-PlantUML

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
title PayQuick - Diagrama de contenedores
Person(customer, "Cliente", "Utiliza la aplicación móvil o la interfaz web")
Person(merchant, "Comerciante", "Utiliza el panel web")
System_Boundary(payquick, "Plataforma PayQuick") {
Container(mobile_app, "Aplicación móvil", "React Native, TypeScript", "Proporciona la interfaz de usuario para los clientes")
Container(web_app, "Aplicación web", "React, TypeScript", "Proporciona el panel de administración y el panel para comerciantes")
Container_Boundary(api, "Aplicación de API") {
Container(api_gateway, "Pasarela de API", "Node.js, Express", "Maneja el enrutamiento, autenticación y límite de tasa")
Container(payment_service, "Servicio de pagos", "Spring Boot, Java", "Procesa pagos y transferencias")
Container(notification_service, "Servicio de notificaciones", "Python, FastAPI", "Envía notificaciones por SMS y correo electrónico")
}
ContainerDb(database, "Base de datos", "PostgreSQL", "Almacena cuentas de usuarios, transacciones y saldos")
ContainerDb(cache, "Caché", "Redis", "Almacena datos de sesión y registros frecuentemente accedidos")
ContainerQueue(queue, "Cola de mensajes", "RabbitMQ", "Maneja el procesamiento asíncrono de notificaciones")
}
System_Ext(bank_api, "API bancaria", "Integración externa con banco")
System_Ext(sms_provider, "API de SMS de Twilio")
Rel(customer, mobile_app, "Utiliza", "HTTPS")
Rel(merchant, web_app, "Utiliza", "HTTPS")
Rel(mobile_app, api_gateway, "Realiza llamadas a la API", "HTTPS/JSON")
Rel(web_app, api_gateway, "Realiza llamadas a la API", "HTTPS/JSON")
Rel(api_gateway, payment_service, "Enruta solicitudes a", "gRPC")
Rel(api_gateway, notification_service, "Enruta solicitudes a", "gRPC")
Rel(payment_service, database, "Lee/escribe datos en", "JDBC")
Rel(payment_service, cache, "Almacena datos frecuentes en", "Protocolo Redis")
Rel(notification_service, queue, "Publica eventos en", "AMQP")
Rel(notification_service, sms_provider, "Envía SMS mediante", "API REST")
Rel(payment_service, bank_api, "Procesa transferencias mediante", "HTTPS")
@enduml
Función de IA de Visual Paradigm
Utilice Conector inteligente con sugerencias de IA para detectar y sugerir automáticamente relaciones entre contenedores según sus tipos y responsabilidades.
Nivel 3: Diagrama de componentes
Lo que muestra
La estructura interna de un contenedor individual.
Ejemplo de PayQuick
Vamos a ampliar el Servicio de Pagocontenedor para ver sus componentes:
Componentes:
-
Controlador de Pago
-
Gestor de Transacciones
-
Servicio de Detección de Fraude
-
Calculadora de Saldo
-
Capa de Repositorio
Código C4-PlantUML

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
title PayQuick - Diagrama de Componentes del Servicio de Pago
!define C4ShapeInRow 4
!define C4BoundaryInRow 1
Container_Boundary(payment_service, "Servicio de Pago") {
Component(payment_controller, "Controlador de Pago", "Controlador REST de Spring", "Maneja las solicitudes de pago entrantes")
Component(transaction_manager, "Gestor de Transacciones", "Servicio de Spring", "Orquesta los flujos de pago")
Component(fraud_detector, "Servicio de Detección de Fraude", "Servicio de Spring", "Valida las transacciones en busca de fraude")
Component(balance_calculator, "Calculadora de Saldo", "Servicio de Spring", "Calcula y actualiza los saldos de las cuentas")
Component(validation_service, "Servicio de Validación", "Servicio de Spring", "Valida los datos de pago y las reglas de negocio")
ComponentDb(transaction_repo, "Repositorio de Transacciones", "Spring Data JPA", "Almacena los registros de transacciones")
ComponentDb(account_repo, "Repositorio de Cuentas", "Spring Data JPA", "Gestiona los datos de las cuentas")
ComponentDb(fraud_repo, "Repositorio de Reglas de Fraude", "Spring Data JPA", "Almacena las reglas de detección de fraude")
Component(notification_client, "Cliente de Notificaciones", "Cliente Feign", "Llama al servicio de notificaciones")
Component(bank_client, "Cliente Bancario", "Cliente Feign", "Integra con la API externa de banca")
}
Rel(payment_controller, transaction_manager, "Reenvía las solicitudes de pago a")
Rel(transaction_manager, fraud_detector, "Valida la transacción con")
Rel(transaction_manager, validation_service, "Valida los datos con")
Rel(transaction_manager, balance_calculator, "Actualiza los saldos mediante")
Rel(transaction_manager, transaction_repo, "Guarda las transacciones en")
Rel(balance_calculator, account_repo, "Lee/escribe datos de cuenta en")
Rel(fraud_detector, fraud_repo, "Comprueba las reglas contra")
Rel(transaction_manager, notification_client, "Envía notificaciones mediante")
Rel(transaction_manager, bank_client, "Procesa transferencias externas mediante")
@enduml
Consejo de Visual Paradigm
Utilice Plantillas de Diagrama de Componentes en Visual Paradigm para crear rápidamente estructuras de componentes. La IA puede sugerir patrones comunes como Repositorio, Capa de Servicio y Controlador según el tipo de contenedor.
💻 Nivel 4: Diagrama de Código (Opcional)
Lo que muestra
Clases, interfaces y métodos reales.
Ejemplo: Clase FraudDetectionService

@startuml
title Servicio de Detección de Fraude - Diagrama de Clases
class FraudDetectionService {
- FraudRulesRepository fraudRepo
- TransactionRepository txnRepo
+ checkFraud(txn: Transaction): FraudResult
- evaluateRules(txn: Transaction): List<Rule>
- calculateRiskScore(txn: Transaction): Double
- isVelocityExceeded(userId: String): Boolean
}
class FraudResult {
+ isBlocked: boolean
+ riskScore: double
+ blockedRules: List<String>
+ getRiskLevel(): RiskLevel
}
class FraudRule {
+ id: Long
+ ruleName: String
+ threshold: Double
+ isEnabled: boolean
+ evaluate(txn: Transaction): boolean
}
class Transaction {
+ id: String
+ amount: BigDecimal
+ userId: String
+ timestamp: DateTime
+ merchantId: String
}
FraudDetectionService --> FraudResult : devuelve
FraudDetectionService --> FraudRule : utiliza
FraudDetectionService --> Transaction : valida
FraudResult ..> FraudRule : contiene
@enduml
Nota: Los diagramas de nivel 4 se generan mejor automáticamente desde el código usando herramientas como:
-
Las funciones de Ingeniería de Código de Visual Paradigm características
-
el generador de diagramas integrado de IntelliJ IDEA
-
Swagger/OpenAPI para documentación de API
🛠️ Herramientas recomendadas: Visual Paradigm + Funciones de IA
¿Por qué Visual Paradigm?
Visual Paradigm es una herramienta completa de modelado que admite diagramas C4 de forma nativa y ofrece potentes funciones asistidas por IA:
Características principales para modelado C4:
-
Generación de diagramas impulsada por IA
-
Describe tu sistema en lenguaje común
-
La IA sugiere diagramas adecuados de nivel C4
-
Genera automáticamente la estructura inicial
-
-
Motor de diseño inteligente
-
Alineación automática de componentes
-
Enrutamiento inteligente de conectores
-
Estilo consistente en todos los diagramas
-
-
Ingeniería de código
-
Reingeniería de código a diagramas (Nivel 4)
-
Ingeniería hacia adelante de diagramas a esqueletos de código
-
Mantén los diagramas sincronizados con la base de código
-
-
Funciones de colaboración
-
Colaboración en tiempo real del equipo
-
Integración con control de versiones
-
Exportar a múltiples formatos (PNG, PDF, SVG)
-
-
Plantillas del modelo C4
-
Plantillas listas para usar para cada nivel C4
-
Ejemplos específicos de industria
-
Guías de mejores prácticas integradas
-
Paso a paso con Visual Paradigm:
-
Descargarla edición Comunidad (gratuita) o edición Empresarial
-
Instalarel complemento del modelo C4 desde el mercado
-
Crearsu primer diagrama usando el asistente
-
Utilice el asistente de IAhaciendo clic en el icono de la varita mágica
-
Exportary compártalo con su equipo
🚀 Mejores prácticas para principiantes
1. Empiece simple, luego itere
-
Comience con el nivel 1, aunque parezca demasiado básico
-
Obtenga el compromiso de los interesados antes de profundizar más
-
Agregue detalles progresivamente según sea necesario
2. Mantenga los diagramas actualizados
-
Actualice los diagramas de nivel 1-2 con cada lanzamiento importante
-
Automatice la generación del nivel 4 cuando sea posible
-
Archive los diagramas desactualizados, no los elimine
3. Denomine las cosas claramente
Use el formato: Nombre [Tecnología] – Descripción
✅ Bueno: Servicio de pago [Spring Boot] - Procesa transacciones de pago
❌ Malo: PaymentService o La cosa de pago
4. Elige el nivel adecuado para tu audiencia
| Audiencia | Nivel recomendado |
|---|---|
| Ejecutivos/Clientes | Solo nivel 1 |
| Gerentes de producto | Niveles 1-2 |
| DevOps/Infraestructura | Niveles 2-3 |
| Desarrolladores | Niveles 2-4 |
5. Utiliza un lenguaje visual consistente
-
Adhírese a las convenciones de color C4
-
Utiliza formas consistentes para elementos similares
-
Mantén estilos de flechas para tipos de relaciones
📊 Ejemplo completo: Mapa del recorrido del usuario a través de los niveles
Tracemos una “Enviar dinero” funcionalidad a través de todos los niveles C4:
Nivel 1 (Contexto): Cliente → PayQuick → Red Bancaria

Nivel 2 (Contenedores): Aplicación móvil → Puerta de enlace de API → Servicio de pago → Base de datos → API del banco

Nivel 3 (Componentes): PaymentController → TransactionManager → Detección de fraude → Calculadora de saldo → Repositorio de transacciones

Nivel 4 (Código): PaymentController.transferir() → TransactionManager.procesar() → FraudDetection.checkFraud()

Este enfoque jerárquico ayuda a diferentes miembros del equipo a comprender el sistema a su nivel adecuado de detalle.
🎓 Conclusión
El modelo C4 transforma la arquitectura de software de un concepto intimidante y abstracto en un mapa práctico y navegable. Al comenzar con la visión general y avanzar progresivamente hacia detalles más específicos, creas documentación que sirve a todos, desde los CTO hasta los desarrolladores principiantes.
Puntos clave:
✅ Nivel 1 establece el escenario: nunca lo omitas, incluso para audiencias técnicas
✅ Nivel 2 revela tu pila tecnológica y tu estrategia de despliegue
✅ Nivel 3 muestra cómo has organizado el código dentro de los servicios
✅ Nivel 4 es opcional: automatízalo cuando sea posible
✅ Visual Paradigm y herramientas similares con funciones de IA pueden acelerar la creación de diagramas en un 50-70%
✅ Documentación viviente es mejor que una documentación perfecta: actualízala de forma iterativa
Recuerda: El objetivo no es crear diagramas hermosos por sí mismos. Es facilitar la comunicación, reducir el tiempo de incorporación y tomar mejores decisiones arquitectónicas. Comienza hoy con un diagrama simple de contexto del sistema y observa cómo crece la comprensión y productividad de tu equipo.
Tus próximos pasos:
-
Elige uno de tus proyectos actuales
-
Dibuja un diagrama de Nivel 1 en papel o pizarra
-
Conviértelo en C4-PlantUML o Visual Paradigm
-
Compártelo con un interesado no técnico para obtener comentarios
-
Agregue gradualmente los detalles del nivel 2 según sea necesario
¡Feliz diagramación! 🎨














