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#
| Elemento | Notación | Qué significa |
|---|---|---|
| Diagrama de clases | Bueno | Clases, miembros, visibilidad, los seis tipos de relación y las multiplicidades. La correspondencia más cercana a UML de toda la sintaxis. |
| Diagrama de secuencia | Bueno | Participantes, mensajes síncronos y asíncronos, activaciones y bloques alt, opt, loop y par. |
| Diagrama de estados | Bueno | Estados, transiciones con guardas, estados compuestos e historia. |
| Diagrama entidad-relación | Bueno | Cardinalidad de pata de gallo y listas de atributos. Cercano al artículo de ER. |
| Diagrama de casos de uso | Parcial | Actores y casos, pero sin include ni extend de primera clase. |
| Componentes, despliegue, tiempos | Ausente | Ninguna 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
- 01Mermaid lleva lo menos de los tres formatos y es el único que vive en un diff.
- 02Clases, secuencia, estados y ER se mapean bien; componentes, despliegue y tiempos no tienen sintaxis.
- 03Estereotipos, notas, restricciones y disposición se pierden, y perder la disposición aquí está bien.
- 04Exporta las dos o tres vistas que los desarrolladores consultan, no el modelo entero.
- 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
- 01UML a XMI
- 02Ida y vuelta Sparx .qea
- 03UML a Mermaid
Lecturas relacionadas
Práctica del modelado
Práctica del modelado
Práctica del modelado
Diagramas de comportamiento