Archyno
ExportsPratique de la modélisation

UML dans un dépôt : Mermaid

L'export qui abandonne le plus et achète la seule chose que les autres ne peuvent pas : un diagramme qui vit à côté du code et change dans la même pull request.

5 min de lectureXMI 2.5.13 sur 3

La réponse courte

  • Classes, séquence, états, cas d'utilisation et ER ont des équivalents directs. Composants, déploiement, temps et structure composite n'ont aucune syntaxe Mermaid.
  • La raison d'accepter cette perte : Mermaid est du texte, et le texte va dans le dépôt.
  • Un diagramme Mermaid apparaît dans le diff d'une pull request et se relit avec le changement qu'il décrit - le seul mécanisme qui garde durablement un diagramme vrai.
  • Ce n'est pas un outil de modélisation. Renommer une classe en Mermaid modifie un fichier ; la renommer dans un modèle met à jour toutes les vues qui la montrent.

01Le compromis, dit clairement#

Mermaid est celui des trois formats d'export qui porte le moins de modèle, et le seul qui règle le problème que la plupart des documentations ont réellement. XMI porte le métamodèle ; .qea porte le métamodèle et la mise en page ; Mermaid porte à peu près ce qui tient dans un paragraphe de texte - et s'affiche dans un README sans aucune étape de build.

C'est tout l'argument, et il est bon. Un diagramme exporté en PNG dans un wiki est faux au bout d'un trimestre et personne ne le remarque, parce que rien dans une modification de code n'oblige quiconque à le regarder. Un diagramme dans docs/architecture.md apparaît dans un diff dès que son fichier est touché, et un relecteur capable de lire le changement voit le diagramme le contredire.

02Ce que Mermaid sait et ne sait pas tracer#

ÉlémentNotationCe que cela signifie
Diagramme de classesBonClasses, membres, visibilité, les six types de relations et les multiplicités. La correspondance la plus proche d'UML dans toute la syntaxe.
Diagramme de séquenceBonParticipants, messages synchrones et asynchrones, activations et blocs alt, opt, loop et par.
Diagramme d'étatsBonÉtats, transitions avec gardes, états composites et historique.
Diagramme entité-associationBonCardinalité en pied-de-corbeau et listes d'attributs. Proche de l'article ER.
Diagramme de cas d'utilisationPartielActeurs et cas, mais pas de include ni extend de premier rang.
Composants, déploiement, timingAbsentAucune syntaxe. Une approximation en organigramme est possible et n'est pas le même diagramme.

Même dans les bonnes lignes, il faut nommer ce qui se perd : les stéréotypes, les notes, les contraintes et toute trace de mise en page. Mermaid dispose ses diagrammes lui-même : l'agencement sur lequel vous avez passé une heure ne survit pas - et pour un diagramme régénéré à chaque changement, c'est un avantage plutôt qu'une perte.

03Pour que ça tienne#

Exportez les vues qu'un développeur ouvrirait réellement, ce qui n'est presque jamais toutes. Un diagramme de classes du cœur du domaine et un diagramme de séquence du flux que tout le monde débogue font un meilleur dépôt que quatorze fichiers que personne ne lit.

Versionnez le Mermaid, pas une image rendue. GitHub, GitLab et la plupart des générateurs de sites statiques affichent les blocs mermaid directement. Une image déposée à côté de la source est une seconde copie qui finira par la contredire.

Régénérez plutôt que de modifier à la main. Dès que quelqu'un corrige un nom de classe dans le Markdown au lieu du modèle, l'export a cessé d'être un export et les deux versions commencent à diverger - c'est exactement le mode d'échec dont traite garder un modèle à jour.

En une ligne chacun

  1. 01Mermaid porte le moins des trois formats et est le seul à vivre dans un diff.
  2. 02Classes, séquence, états et ER se traduisent bien ; composants, déploiement et timing n'ont pas de syntaxe.
  3. 03Stéréotypes, notes, contraintes et mise en page se perdent - et perdre la mise en page convient ici.
  4. 04Exportez les deux ou trois vues que les développeurs consultent, pas tout le modèle.
  5. 05Versionnez le texte, jamais une image rendue, et régénérez au lieu de retoucher.

04Questions fréquentes#

Quels diagrammes UML Mermaid gère-t-il ?

Classes, séquence, états et cas d'utilisation ont des équivalents directs, et il existe aussi un diagramme entité-association. Composants, déploiement, temps, structure composite et les autres n'ont pas de syntaxe : un modèle qui en contient s'exporte partiellement, voire pas du tout.

Pourquoi exporter vers Mermaid s'il perd du détail ?

Parce que c'est du texte, et le texte va dans le dépôt. Un diagramme Mermaid apparaît dans le diff d'une pull request, se rend nativement sur GitHub et GitLab, et se relit en même temps que le changement qu'il décrit - le seul mécanisme qui garde durablement un diagramme vrai.

Mermaid remplace-t-il un outil de modélisation ?

Non. Mermaid dessine des diagrammes ; un outil de modélisation tient un modèle derrière plusieurs vues. Renommer une classe en Mermaid, c'est modifier un fichier ; la renommer dans un modèle met à jour toutes les vues qui la montrent. Réservez Mermaid aux vues qui doivent vivre dans le dépôt.

Dans cette série

À lire aussi

Tous les articles