Destacado

C4 Model | Por una mejor comunicación

Introducción.

Han pasado muchos años desde la introducción de UML en el ámbito del desarrollo de software, con la llegada de Agile, la forma de desarrollar software cambió drásticamente: algunos conceptos evolucionaron, aparecieron nuevos mientras que otros fueron abandonados.

Hoy en día, UML es utilizado por contadas personas, la propia industria ha dejado de lado aquellos elaborados diagramas, recurriendo a diagramas genéricos o diagramas parciales, altamente variados entre sí, para representar y describir arquitecturas/diseños.

Aquí es donde entra Simon Brown, quien identificó este problema de comunicación dentro de las organizaciones.

Para solucionarlo, desarrolló el modelo C4, un sistema de modelos, capaz de describir el software de manera clara y accesible, no solo para los equipos de desarrollo y arquitectos sino para todo aquel interesado en comprender el funcionamiento y  estructura de un sistema.


Modelo C4.

El modelo C4 se basa en un conjunto de abstracciones jerárquicas (Contexto, Contenedores, Componentes y Código) de ahí su nombre -- C4 --.

No utiliza una notación específica (UML, SysML, etc) por lo que es importante que se sea lo más descriptivo posible con los elementos que se utilicen para describir cada nivel.

El principal objetivo de este modelo es crear un mapa de nuestro código a diferentes niveles de detalle. 

Funcionando de manera similar a Google Maps: comenzamos con una vista general y, a medida que profundizamos, accedemos a detalles más específicos, sin embargo, en lugar de explorar una ubicación geográfica, navegamos a través de los distintos niveles de nuestra arquitectura.

Abstracciones.

Diagrama de Contexto.

Proporciona una vista de alto nivel del sistema y su objetivo es describir como el sistema interactua con usuarios y otros sistemas externos.

Elementos.

  • El sistema que se está diseñando.
  • Uusarios (internos/externos) que interactúan con el sistema.
  • Sistemas externos de los cuáles depende el sistema.

Ejemplo.



Una vez definido el alcance general del sistem@, lo siguiente es hacer un zoom-in en él, utilizando el diagrama del siguiente nivel: contenedor.

Diagrama de Contenedor.

Este diagrama muestra la estructura del sistema a alto nivel, identificando los principales contenedores, las tecnologías usadas y como la comunición fluye entre ellos.

Elementos.

  • Contenedor. Un contenedor es todo aquello que necesita estar corriendo para que el sistema funcione correctamente, puede ser una applicación web, un script, un API, una base de datos, etc.
  • Conexiones. Muestran el flujo de datos entre los contenedores.

Ejemplo.



Contenedores que integran al sistema de pedidos.

Diagrama de Componente.

Este diagrama identifica cada uno de los elementos que componen un contenedor así como las interacciones entre ellos, sus responsabilidades y algunos detalles de implementación.

Elementos.

  • Componentes. Elementos individuales que integran un contenedor, estos dependiendo de la implementación pueden ser clases, interfaces o incluso modulos.
  • Relaciones. Interacciones, flujo de datos entre los mismos componentes.

Ejemplo.


Componentes que integran al contenedor REST API.

Diagrama de Código.

Finalmente, llegamos al nivel más detallado de abstracción, donde desglosamos los componentes en cada uno de los elementos de código, que los conforman.

Este nivel suele ser opcional, ya que representa la abstracción más técnica, enfocada principalmente en desarrolladores y arquitectos.

Aquí podemos emplear distintos diagramas de UML, como el diagrama de clases, el diagrama de entidad-relación, el diagrama de objetos o el diagrama de secuencias; Para representar los elementos que componen al componente así como sus interacciones.

Elementos.

  • Clases o módulos específicos. Cada componente está constituido por una serie de elementos de código: Clases, enums, interfaces, funciones, objetos.
  • Relaciones. Interacciones entre clases o funciones.

Ejemplo.

Diagrama de entidad-relación que describe el esquema de la base de datos del sistema.


Extra.

Algo muy interesante es que existen diversas herramientas que facilitan la creación diagramas de arquitectura de software basados en el modelo C4

Una de ellas es structurizr, creada por el mismo Simon;  con la cuál podemos definir los diagramas usando código 🙈.

Links Relacionados.


  
Happy hacking!

Comentarios

Entradas populares