Comment dessiner des diagrammes d’architecture logicielle (2022)
(terrastruct.com)- Un bon diagramme d’architecture permet de faire passer les idées et de maintenir la collaboration dans la durée grâce au bon niveau d’abstraction, à sa fraîcheur et à l’élimination des ambiguïtés, plutôt qu’à la décoration
- Le principe de base est de minimiser la distance entre voisins en plaçant près les uns des autres les éléments connectés ; plus le diagramme grandit, plus il faut itérer en effaçant et en redessinant
- La symétrie ne donne pas seulement une impression agréable : elle renforce aussi le sens, par exemple en plaçant les entrées et les sorties de côtés différents
- Maintenir les formes alignées au centre rend même les concepts complexes moins compliqués visuellement et évite de désorganiser toute la disposition lors de l’ajout de nouveaux éléments
- Les groupes de conteneurs étiquetés montrent d’un coup d’œil des séparations d’environnements comme AWS et Azure, des abstractions comme les implémentations de ReaderWriter, ou des ensembles d’objets liés comme Cores
Les conditions d’un diagramme durable
- Un bon diagramme ne disparaît pas une fois la réunion terminée : il peut continuer à servir de point de référence pour les discussions et questions ultérieures
- Les diagrammes qui durent ont quelques caractéristiques communes
- Les éléments doivent être au bon niveau d’abstraction
- Ils doivent rester à jour
- Ils doivent être dépourvus d’ambiguïté
- Les mêmes entités et relations peuvent être dessinées de plusieurs façons, mais certaines dispositions facilitent la collaboration pendant toute la durée du projet, tandis que d’autres disparaissent à la fin de la réunion
- La beauté dont il est question ici n’est pas une décoration comme des ombres ou des coins arrondis, mais une beauté fonctionnelle qui transmet efficacement la pensée
Principes pour créer une disposition lisible
-
Minimiser la distance entre voisins
- Le principe de base est de dessiner proches les uns des autres les nœuds connectés entre eux
- C’est facile dans un petit diagramme, mais à mesure que le diagramme grandit et que de nouvelles connexions sont ajoutées, cette propriété se dégrade facilement
- De même que l’on corrige les parties concernées lorsqu’on découvre un cas limite dans le code, ou que l’on modifie une phrase lorsqu’on repère un élément manquant dans un document, il faut aussi effacer et redessiner un diagramme destiné à la documentation lorsque c’est nécessaire
- Dans un entretien, le coût de redessiner peut sembler lourd, mais pour un document utilisé par plusieurs personnes ou plusieurs équipes, les corrections itératives conduisent à un meilleur diagramme
-
Chercher la symétrie
- La symétrie contribue fortement à l’impression esthétique d’un diagramme, et le cerveau humain a tendance à préférer la symétrie visuelle, comme dans les visages
- Même si tous les nœuds sont aussi proches que possible de leurs voisins, un manque de symétrie peut donner l’impression d’un dessin légèrement de travers
- Même si la distance d’un nœud à ses voisins augmente un peu, une version plus symétrique peut être plus agréable à regarder
- Placer les entrées d’un côté et les sorties de l’autre renforce à la fois la symétrie et le sens du diagramme
-
Alignement au centre
- L’alignement est un facteur important pour donner à un diagramme un aspect net
- Un diagramme net rend les concepts plus clairs, tandis qu’un diagramme désordonné les fait paraître plus complexes
- Si l’on place dès le départ des formes au hasard sur une toile vide, la disposition qui suit risque elle aussi de rester aléatoire
- Comme l’alignement n’a de sens qu’entre au moins deux formes, maintenir l’alignement à chaque ajout d’un nouvel élément rend naturellement le diagramme plus propre
- L’alignement naît souvent de la symétrie, mais ce n’est pas toujours le cas
-
Utiliser des groupes de conteneurs
- Diviser le diagramme en plusieurs zones étiquetées aide le lecteur à comprendre plus facilement la structure
- Les conteneurs peuvent ajouter les informations suivantes à un diagramme
- Ajouter du contexte, par exemple « ces services sont sur AWS, ceux-ci sont sur Azure »
- Montrer une abstraction, par exemple « ce sont tous des implémentations de ReaderWriter »
- Regrouper des objets liés, comme rassembler core 1, 2, 3, 4 dans un conteneur « Cores »
Points abordés dans la suite
- La partie 2 poursuivra avec les sujets suivants
- Tracer les chemins des arêtes
- Taille et position des libellés
- Couleurs
- Icônes
1 commentaires
Avis de Hacker News
J’aime beaucoup créer des diagrammes avec D2. C’est similaire à mermaid.js, mais avec davantage d’options de mise en forme, et je trouve personnellement la syntaxe meilleure
J’ai aussi écrit un court billet à ce sujet : https://victorbjorklund.com/build-diagrams-as-code-with-d2-d...
Je comprends qu’un diagramme logiciel laid ne soit pas agréable à regarder, mais le décorer, c’est un peu comme ajouter des courbes à un graphique linéaire. Visuellement, ça peut mieux rendre, mais cela nuit aux données que l’on cherche à transmettre
J’ai rendu le premier exemple
x -> yen SVG, puis ouvert uniquement le SVG dans le navigateur ; j’ai cherché dans toute la documentation comment contrôler l’alignement de sortie, sans trouverComme la documentation et le résultat réel divergeaient, j’ai arrêté de l’utiliser. En cherchant
"d2lang connection left to right", je suis arrivé sur https://d2lang.com/tour/layouts/, mais cette page ne semble pas liée depuis la documentation d’ensemble ; l’ajouter aiderait probablement les visiteursPour les organigrammes, je pense que c’est l’un des outils de diagrammes textuels les plus simples et rapides que j’aie utilisés jusqu’ici
Quand un système commence à changer, les jolis diagrammes deviennent très difficiles à maintenir. Imaginez ajouter une nouvelle boîte au milieu d’un diagramme déjà complexe : il peut falloir une heure pour tout réaligner
Dans les années 2020, le temps des développeurs est probablement mieux employé à gérer les diagrammes comme du code : https://www.ilograph.com/blog/posts/its-time-to-drop-drag-an...
Mais en fait, je crois que ce n’est pas vraiment une blague
Le pire, c’est qu’ajouter une nouvelle boîte obligeait généralement à réaligner toutes les flèches. Résultat : le diagramme n’était pas maintenu à jour en continu
Pour les diagrammes de séquence, l’utilisation de plantML était plus satisfaisante. Le travail en lui-même était plus simple, si bien que la sortie de l’interpréteur était généralement exploitable sans intervention manuelle
C’est comparable à une UI laide. Même si elle est laide, les utilisateurs y sont déjà habitués. Dès qu’on la « range », on casse leur modèle mental et on les oblige à réapprendre
Parfois, il ne s’agit que de faire un croquis pour organiser ses idées, qui sera jeté 20 minutes plus tard
Mais si c’est une référence pour l’onboarding ou pour expliquer un système à d’autres équipes, l’heure passée à produire quelque chose de plus compréhensible peut largement être amortie
Pour dessiner ce genre de choses, j’utilise yEd. Même si je mets les boîtes et les flèches n’importe comment, quelques clics dans le menu suffisent à tout organiser automatiquement
Il faut toutefois accepter des compromis. Les boîtes dans les boîtes ne finissent pas toujours bien. Malgré tout, cela permet de documenter beaucoup plus vite, et après quelques essais on comprend ce qui fonctionne ou non ; pour moi, c’est un bon compromis
Il suffit d’extraire les relations en TGF, de les importer, puis d’appliquer une mise en page hiérarchique
Le format
from, to, relationsuffitIl y a ici de fortes similitudes avec les schémas électriques, les diagrammes de circuits et d’autres dessins d’ingénierie. Il n’existe pas une seule « bonne » manière de faire
Comme pour le code, la capacité à choisir de bonnes abstractions et représentations fait la différence entre une idée compréhensible et un chaos regrettable. Ce n’est pas une question de beauté ou d’esthétique, mais un outil qui exige une réflexion et un effort actifs dans la conception
J’aimerais disposer d’un outil permettant de zoomer facilement à l’intérieur d’un diagramme, comme dans une animation à zoom infini
https://VisualFlows.io v1.0 sortira bientôt
J’ai pu créer en quelques minutes une carte « d’architecture » animée du SaaS de la société mère : https://app.visualsitemaps.com/user_flows/share/e64da8ed-2ef...
Les principales fonctionnalités sont Smart Sections, Smart Edges, Smart Node Deletion, les modes sombre/clair, l’embed, le glisser-déposer d’images/SVG/GIF, les icônes AWS/Windows/Google, Markdown prévu pour la semaine prochaine, etc.
Voir Smart Sections : https://support.visualsitemaps.com/en/articles/6477269-how-t...
J’ai vraiment aimé cet article. Quand je dessine des diagrammes d’architecture, que j’écris de la documentation ou du code, ou que je fais quelque chose au travail, j’essaie de prendre un moment pour le rendre « agréable à regarder »
C’est difficile d’expliquer pourquoi, mais je sais que, quand je le regarde ensuite, je l’apprécie davantage
Je me suis un peu inquiété que ce ne soit peut-être pas la meilleure façon d’utiliser mon temps, mais je n’ai jamais entendu quelqu’un me dire de ne pas le faire
Ce qui rend cet article intéressant, c’est qu’il explique quelque chose que je faisais à l’instinct comme une méthode pratique pour rendre quelque chose plus beau
Je suis déconcerté quand je vois des membres de l’équipe qui semblent ne pas avoir de sens visuel du code. Ils ne mettent pas de ligne vide entre la fin d’une fonction et la déclaration de la suivante, ou bien ils alternent dans les signatures de fonction entre un paramètre par ligne et plusieurs paramètres par ligne. À mes yeux, ça saute aux yeux, mais eux n’ont pas l’air de s’en soucier
Parfois ça prend du temps, mais il y a quelque chose de gratifiant. Je sais que j’ai un certain talent artistique technique, et au lycée je voulais devenir dessinateur industriel
C’est exactement le but de la visualisation
D2 est bien pour ce genre d’usage. Dans mon précédent poste, j’avais écrit un programme qui analysait tous les fichiers
serverless.ymlet générait automatiquement un énorme diagramme D2Nous faisions des microservices sur AWS, et c’était appréciable que le diagramme se mette à jour automatiquement quand le système grossissait. Je l’avais conçu pour pouvoir le découper en petits diagrammes par sous-système, par exemple en les séparant par SNS topic
Je ne comprends pas le premier exemple. L’auteur parle d’un nœud non planifié, lui donne effectivement le nom « I was unplanned », puis dit « si on l’avait planifié à l’avance »
Dans le contexte d’un diagramme, je ne vois pas comment on peut planifier à l’avance quelque chose de non planifié. Je me demande s’il veut dire qu’il faut laisser suffisamment d’espace autour de tous les nœuds
De plus, l’amélioration proposée donne l’impression que « something » et « I was unplanned » utilisent le même canal ou mécanisme lorsqu’ils interagissent avec « engine »
J’utilise Miro, et pour du contenu de haut niveau ou de l’idéation, l’outil de post-its est plutôt correct. En revanche, il ne va pas au-delà d’un niveau intermédiaire
Une fois les composants et les systèmes définis, il existe des outils mieux adaptés à ce travail
Si la documentation du projet est en Markdown, on peut insérer des diagrammes avec des blocs ```plantuml au lieu d’utiliser un binaire séparé
Dans GitLab, le rendu est joli quand on consulte les fichiers
.mddans le navigateur. GitHub n’a pas encore cette fonctionnalitéhttps://docs.github.com/en/get-started/writing-on-github/wor...
https://pikchr.org/home/doc/trunk/doc/usepikchr.md