Archyno
ExportsPráctica del modelado

UML en un repositorio: Mermaid

La exportación que más renuncia y compra lo único que las otras no pueden: un diagrama que vive junto al código y cambia en la misma pull request.

5 min de lecturaXMI 2.5.13 de 3

La respuesta corta

  • Clases, secuencia, estados, casos de uso y ER tienen equivalentes directos. Componentes, despliegue, tiempos y estructura compuesta no tienen sintaxis en Mermaid.
  • La razón para aceptar esa pérdida es que Mermaid es texto, y el texto va en el repositorio.
  • Un diagrama Mermaid aparece en el diff de una pull request y se revisa con el cambio que describe: el único mecanismo que mantiene un diagrama verdadero de forma fiable.
  • No es una herramienta de modelado. Renombrar una clase en Mermaid edita un fichero; renombrarla en el modelo actualiza todas las vistas que la muestran.

01El intercambio, dicho claramente#

Mermaid es el que menos modelo transporta de los tres formatos de exportación y el único que resuelve el problema que la mayoría de la documentación tiene de verdad. XMI lleva el metamodelo; .qea lleva el metamodelo y la disposición; Mermaid lleva aproximadamente lo que cabe en un párrafo de texto, y se renderiza en un README sin ningún paso de build.

Ese es todo el argumento, y es bueno. Un diagrama exportado como PNG a un wiki está mal en un trimestre y nadie se da cuenta, porque nada en un cambio de código obliga a nadie a mirarlo. Un diagrama en docs/architecture.md aparece en un diff cuando se toca su archivo, y quien sabe leer el cambio ve al diagrama contradecirlo.

02Qué puede y qué no puede dibujar Mermaid#

ElementoNotaciónQué significa
Diagrama de clasesBuenoClases, miembros, visibilidad, los seis tipos de relación y las multiplicidades. La correspondencia más cercana a UML de toda la sintaxis.
Diagrama de secuenciaBuenoParticipantes, mensajes síncronos y asíncronos, activaciones y bloques alt, opt, loop y par.
Diagrama de estadosBuenoEstados, transiciones con guardas, estados compuestos e historia.
Diagrama entidad-relaciónBuenoCardinalidad de pata de gallo y listas de atributos. Cercano al artículo de ER.
Diagrama de casos de usoParcialActores y casos, pero sin include ni extend de primera clase.
Componentes, despliegue, tiemposAusenteNinguna sintaxis. Una aproximación con diagrama de flujo es posible y no es el mismo diagrama.

Incluso en las filas buenas conviene nombrar lo que se pierde: estereotipos, notas, restricciones y todo rastro de disposición. Mermaid dispone sus propios diagramas, así que la colocación en la que invertiste una hora no sobrevive, y para un diagrama que se regenerará en cada cambio eso es una ventaja más que una pérdida.

03Para que se mantenga#

Exporta las vistas que un desarrollador abriría de verdad, que casi nunca son todas. Un diagrama de clases del núcleo del dominio y un diagrama de secuencia del flujo que todos depuran son mejor repositorio que catorce archivos que nadie lee.

Versiona el Mermaid, no una imagen renderizada. GitHub, GitLab y la mayoría de generadores de sitios estáticos renderizan bloques mermaid directamente. Una imagen guardada junto al origen es una segunda copia que acabará contradiciéndolo.

Regenera en vez de editar a mano. En cuanto alguien corrige un nombre de clase en el Markdown en lugar de en el modelo, la exportación ha dejado de ser una exportación y las dos versiones empiezan a separarse: exactamente el fallo del que trata mantener un modelo al día.

En una línea cada uno

  1. 01Mermaid lleva lo menos de los tres formatos y es el único que vive en un diff.
  2. 02Clases, secuencia, estados y ER se mapean bien; componentes, despliegue y tiempos no tienen sintaxis.
  3. 03Estereotipos, notas, restricciones y disposición se pierden, y perder la disposición aquí está bien.
  4. 04Exporta las dos o tres vistas que los desarrolladores consultan, no el modelo entero.
  5. 05Versiona el texto, nunca una imagen renderizada, y regenera en vez de retocar.

04Preguntas frecuentes#

¿Qué diagramas UML soporta Mermaid?

Clases, secuencia, estados y casos de uso tienen equivalentes directos, y existe además un diagrama entidad-relación. Componentes, despliegue, tiempos, estructura compuesta y el resto no tienen sintaxis, así que un modelo que los contenga se exporta parcialmente o nada.

¿Por qué exportar a Mermaid si pierde detalle?

Porque es texto, y el texto va en el repositorio. Un diagrama Mermaid aparece en el diff de una pull request, se renderiza solo en GitHub y GitLab, y se revisa junto al cambio que describe, que es el único mecanismo que mantiene un diagrama verdadero de forma fiable.

¿Sustituye Mermaid a una herramienta de modelado?

No. Mermaid dibuja diagramas; una herramienta de modelado sostiene un modelo detrás de muchas vistas. Renombrar una clase en Mermaid es editar un fichero; renombrarla en el modelo actualiza todas las vistas que la muestran. Usa Mermaid para las vistas que deben vivir en el repositorio.

En esta serie

Lecturas relacionadas

Todos los artículos