Anteriormente estuvimos hablando sobre la importancia de disponer en las organizaciones de un lenguaje de modelado común para el diseño de aplicaciones, hoy entraremos a ver un poco más en detalle el lenguaje de modelado C4.
Analogía
Antes de profundizar sobre C4, vamos a explicar el razonamiento que hay sobre su estructura. Su creador suele utilizar una analogía sobre como usamos Google maps y nos alejamos y acercamos dependiendo del nivel de información que queremos. Por poner otro ejemplo, yo en este caso voy a hacer la analogía con edificios.
Imaginemos un edificio donde queremos comprar un piso. Implicados en ese piso, existen multitud de planos distintos conteniendo cada uno de ellos información diferente, porque a las personas a quienes van dirigida esa información también serán diferentes.
Por ejemplo, podemos tener un primer plano con la visión general del edificio, donde se muestren todas las plantas y su diseño, ideal para hacernos una idea de cómo es el edificio en general.

Si queremos tener más detalle, podemos ampliar un poco haciendo zoom, y tendríamos el plano de la planta, donde se muestran los pisos y las habitaciones y como se encuentran comunicadas entre ellas. Plano ideal para discutir con la familia quien se quedará con cada habitación o ver medidas para los muebles.
Si seguimos ampliando para obtener más detalle, podríamos tener una visión de la instalación de fontanería o eléctrica del piso.
Podríamos seguir ampliando y tener una visión detallada del montaje eléctrico de una de las cajas de interruptores. Plano muy interesante para el electricista, pero quizá no tanto para mostrar a nuestra familia.
Son planos con diferente nivel de detalle, diferente información, porque las personas interesadas en cada uno de los planos es diferente.
Algo semejante ocurre en C4.
C4
C4 (Context, Containers, Components, and Code) es un conjunto de diagramas de arquitectura que proporciona un enfoque pragmático y escalable para modelar la arquitectura de software y se enfoca en proporcionar diagramas simples, legibles y fáciles de entender. C4 fue desarrollado por Simon Brown y se ha convertido en un lenguaje de modelado popular en la comunidad de arquitectura de software.
Los diagramas C4 están diseñados para ser simples y comprensibles a la vez que ser fáciles de ampliar y comunicar, lo que los convierte en una herramienta útil para el desarrollo de software. Cada uno de los cuatro niveles de abstracción (Contexto, Contenedores, Componentes y Código) se enfoca en diferentes aspectos de la arquitectura y está representado por un diagrama separado.

A continuación, se describen brevemente los cuatro niveles de abstracción de C4:
- Contexto (Nivel 1): este nivel proporciona una vista de alto nivel del sistema y su contexto. Describe la relación e interacciones del sistema con su entorno, con otros sistemas y los actores externos que interactúan con él .El objetivo principal del diagrama de contexto es proporcionar una vista de alto nivel de la arquitectura del sistema.
- Contenedores (Nivel 2): este nivel describe los componentes del sistema y su agrupación en contenedores. Los contenedores son componentes de alto nivel que contienen otros componentes. El diagrama de contenedores muestra la estructura general del sistema y cómo se divide en componentes más pequeños . Como aclaración importante, decir que este nivel no tiene nada que ver (pese a su nombre) con contenedores como los Docker u de otros sistemas de virtualización. Este nivel suele coincidir con aplicaciones o bases de datos.
- Componentes (Nivel 3): este nivel describe los componentes individuales del sistema y cómo interactúan entre sí. Cada componente representa una unidad funcional del sistema. Este diagrama muestra la relación entre los componentes y cómo se comunican.
- Código (Nivel 4): este nivel describe la estructura interna de los componentes y el detalle de su implementación en código. Este diagrama muestra la estructura interna de cada componente y cómo se implementa en código. El diagrama de código es opcional y solo se utiliza en situaciones en las que es necesario analizar el código fuente del sistema.
Otros diagramas
C4 nos habla de los cuatro diagramas principales, pero podemos acompañarlos de otros diagramas que acaben de ayudar a conocer la realidad de cada aplicación.
Volviendo a la analogía del edificio, podemos estar interesados en otro tipo de información, por ejemplo:
- Localización del edificio. ¿Dónde se encuentra el edificio dentro de la cuidad? ¿Es un buen barrio? ¿Con parques alrededor? Para ello podemos usar un plano de la ciudad donde marcar el edificio en el
- Comunicación: ¿Está bien comunicado? ¿Cómo me puedo desplazar desde el edificio a otros puntos de la ciudad? Un plano de la red de transportes donde podamos ver la localización del edificio sería ideal.
- Abastecimientos generales. ¿Cómo se conecta a la red eléctrica? ¿Y a la red de agua? Un plano de las instalaciones ayudaría en este caso.

Del mismo modo, C4 permite el uso de diagramas complementarios que ayuden por ejemplo a conocer:
- El contexto global de la compañía y como este sistema se relaciona con el resto de sistemas. Para ello C4 nos habla del diagrama “System Landscape Diagram”.
- La relación que se dará entre los elementos, una vez el sistema esté funcionando. Lo podríamos hacer mediante el “Dynamic Diagram”.
- Cómo se desplegará la solución a nivel de infraestructura. Mediante el “Deplyment Diagram” podemos representar como los niveles 1 y 2 del diseño se relacionan con la infraestructura disponible tal como maquinas físicas, máquinas virtuales, redes, etc.
Beneficios
El uso de C4 para modelar la arquitectura de software tiene varios beneficios. Algunos de ellos incluyen:
- Proporciona una vista de alto nivel de la arquitectura del sistema.
- Facilita la comunicación y comprensión entre los miembros del equipo.
- Permite una mejor planificación y toma de decisiones en cuanto a la evolución del sistema.
- Proporciona una estructura escalable para modelar la arquitectura de software.
- Fomenta la documentación clara y precisa de la arquitectura del sistema.
- Es fácil de aprender y rápido de poner en práctica.
- Existen multitud de herramientas para su diseño.
- Puede usarse de manera gráfica o mediante codificación.
Conclusión
C4 es un enfoque de modelado de arquitectura de software simple, escalable y legible que se enfoca en cuatro niveles de abstracción: contexto, contenedores, componentes y código. Los diagramas C4 son útiles para proporcionar una vista clara y precisa de la arquitectura de software, lo que facilita la comunicación y comprensión entre los miembros del equipo y permite una mejor planificación y toma de decisiones en cuanto a la evolución del sistema. Además, C4 fomenta la documentación clara y precisa a lo largo de la empresa de la arquitectura del sistema, lo que es muy útil para el mantenimiento del software a largo plazo.
C4 es fácil de entender y utilizar, lo que lo hace popular entre los desarrolladores de software. Además, el enfoque escalable de C4 permite que los diagramas de arquitectura se adapten a sistemas de diferentes tamaños y complejidades.