C4 Model: Un modelo para documentar arquitecturas de software

C4 Model: Un modelo para documentar arquitecturas de software

Una forma sencilla, util y eficiente para plasmar tus arquitecturas de software.

Hace un par de años recuerdo que mi Engineer Manager, me contó sobre un enfoque para diseñar y visualizar arquitectura de software en diferentes niveles, estuvimos hablando de C4 Model y realmente me sorprendió la facilidad con la que puedes diseñar una arquitectura en diferentes vistas/niveles. Lo interesante de todo esto es que el output de C4 son vistas de arquitectura que visualmente son sencillas y a la vez muestran mucha información relevante para tus equipos, esto hace que sea extremadamente amigable y lo suficientemente útil para utilizarlo entre los equipos de ingeniería.

C4 se basa en los mapas cartográficos donde partes de una vista muy general como lo puede ser la vista de un continente y luego puedes ir haciendo zoom para ver un país, posteriormente puedes seguir haciendo zoom y ver una ciudad en concreto, hasta un pueblo en particular. De la misma forma C4 busca implementar esto en los sistemas de información, esto lo hace a través de diferentes niveles.

Tipos y niveles

C4 cuenta con varios niveles principales a través de los cuales podemos ir profundizando, estos niveles son los siguientes:

  • Nivel 1 - Diagrama de Contexto.

  • Nivel 2 - Diagrama de Contenedores.

  • Nivel 3 - Diagrama de Componentes.

  • Nivel 4 - Diagramas UML a nivel de codigo, por ejemplo un diagrama de clases.

En la siguiente imagen puedes visualizar exactamente en que consiste la navegación que C4 propone:

rewrg

Estos niveles nacieron de abstracciones que se utilizaron para crear un lenguaje ubicuo y que se utilizó para crear la estructura estática de un sistema de software, es así como nació C4. Entonces, es aquí donde podemos decir que un sistema de software tiene uno o más contenedores, estos contenedores a su vez están formados por uno o más componentes y así mismo estos componentes están formados por diferentes elementos de código.

Nivel de Contexto

En el nivel contexto vamos a plasmar nuestro sistema y su interacción con los usuarios y otros sistemas externos, de esta forma podemos comunicar efectivamente a un muy alto nivel con qué sistemas interactuamos y que acciones realiza en general.

Nivel de Contenedores

En este nivel, vamos a enfocarnos en plasmar los contenedores de nuestro sistema, la interacción entre sí y la interacción con sistemas externos. Es muy importante saber que cuando hablamos de contenedores no estamos hablando de un contenedor Docker, si no de un contenedor que representa una aplicación o un almacén de datos.

Nivel de Componentes

Ya en este nivel entramos a un nivel mucho más técnico donde vamos a profundizar en los componentes que conforman un contenedor, por ejemplo si tenemos un contenedor construido con Spring Boot, podemos ver componentes como Controladores, Servicios, Repositorios, etc.

Nivel de Codigo

Por último en este nivel podemos plasmar nuestro código, por ejemplo con un diagrama de clases (UML), el objetivo de este nivel es tener una vista de nuestro código bien documentada con un detalle de código específico. Este nivel en muchos casos es opcional, me refiero a que tienes que analizar si para tus proyectos quieres implementar todos los niveles o solo el de contexto, contenedores y componentes.

Ventajas y experiencia utilizando C4

Una de las ventajas que tiene C4 frente a otros lenguajes como UML, es que es muy amigable y sencillo de implementar para los desarrolladores, al final en unos cuantos pasos ya puedes empezar a utilizarlo.

Personalmente, lo he estado usando en conjunto con mi equipo de trabajo estos últimos años y ha sido un éxito, volviéndolo así un estándar en el proceso de construcción de software. También un punto positivo es que hay una amplia adaptación en la industria de este modelo y lo puedes empezar a implementar en herramientas como Draw.io o Lucidchart donde ya puedes visualizar los componentes de C4.

Conclusión

Considero que implementar C4 en los equipos de ingeniería les facilitará el entendimiento del proyecto y sus desarrollos. Al principio, como todo proceso de adaptación, tendrán que experimentar con el modelo, entender las abstracciones y notaciones, pero al final se encontraran en un estado donde cualquier arquitectura o diseño que estén definiendo lo podrán plasmar rápidamente.

Te recomiendo que si quieres saber más sobre C4 model visites su página principal, ya que existen muchos diagramas adicionales que puedes implementar con diferentes objetivos.

Si te gusto este artículo y quieres enterarte de primera mano cuando publique nuevos artículos, te invito a que te suscribas a mi newsletter.