Une cartographie des patterns architecturaux pour développeurs et tech leads

Lorsque vous rejoignez un projet de microservices, vous remarquez rapidement un détail caractéristique. Chaque développeur comprend différemment l'architecture propre. L'un essaie de caser CQRS dans un CRUD de trois pages, un autre construit un domaine monumental avec une douzaine de couches de wrappers, et un troisième résout les problèmes de couplage via l'Event Sourcing. Pour qu'une équipe parle le même langage, vous avez besoin d'une base de connaissances unifiée.
Chacun d'entre nous a des dizaines de liens vers des articles et vidéos dans ses favoris. Le problème, c'est que ces ressources se perdent rapidement. L'auteur du dépôt awesome-software-architecture, Mehdi Hadeli, a résolu ce problème : il a compilé une collection structurée de ressources sur la conception de systèmes en un seul endroit.
Ce qu'est ce dépôt
Il s'agit d'une base de connaissances ouverte avec des liens vers des articles, tutoriels, livres et exemples de code. Le projet a recueilli plus de 11 000 étoiles sur GitHub. Contrairement aux répertoires de style Awesome standard, il ne se contente pas de structurer des sujets généraux—il couvre des patterns et des décisions architecturales spécifiques.
Les développeurs ont également lancé un site web séparé awesome-architecture.com où la lecture des ressources est plus pratique que dans les fichiers Markdown.
Sections principales de la collection
Styles et approches architecturaux
Le dépôt détaille les façons d'organiser le code en détail :
- Monolithes et microservices. Du Monolithe classique au concept de Modular Monolith, qui aide à préparer le code pour un éventuel découpage.
- Architectures en couches. Une breakdown des différences entre Clean Architecture, Onion et Hexagonal.
- Vertical Slice Architecture. Une approche qui regroupe le code autour des fonctionnalités métier plutôt que des couches techniques.
- Modèle Actor. Principes de fonctionnement des actors avec des exemples utilisant les frameworks Akka.NET, Orleans et ProtoActor.
Domain-Driven Design et CQRS
La section DDD s'est avérée être la plus détaillée. L'auteur a décomposé le concept d'Eric Evans en ses éléments constitutifs. Le catalogue contient des ressources sur le design stratégique (Bounded Context, Ubiquitous Language) et les patterns tactiques (Aggregates, Value Objects, Domain Services). Les anti-patterns comme l'Anemic Domain Model sont traités séparément.
Un bloc dédié est alloué au sujet CQRS, abordant la séparation des modèles lecture/écriture, la cohérence des données et sa connexion avec l'Event Sourcing.
Systèmes distribués et cloud
Lors de la conception de services cloud, la section Cloud Design Patterns sera utile :
- Patterns de résilience : Circuit Breaker, Bulkhead, Retry.
- Messagerie : Outbox, Inbox, Saga, Change Data Capture.
- Composants réseau : API Gateway (Ambassador, Kong, Ocelot), Service Mesh (Istio, Linkerd) et solutions d'équilibrage de charge.
La collection comprend également des ressources sur les outils d'infrastructure : Kubernetes, Terraform, Nomad, Kafka, RabbitMQ et NATS.
Observabilité et fiabilité
Une section séparée est dédiée à l'Observabilité. Elle contient des articles sur le traçage de bout en bout via Correlation ID, la collecte de logs via les stacks ELK, EFK, Fluent Bit et Grafana Loki. De plus, elle couvre la back pressure et la construction de systèmes tolérants aux pannes.
Fonctionnalités et nuances de la collection
Vous rencontrerez des tableaux marqués TODO dans le README lui-même. Ne soyez pas alarmé : les articles sur ces sujets sont déjà dans le dossier docs. La navigation est bien organisée, avec des ressources distribuées dans des répertoires, ce qui facilite la recherche du sujet dont vous avez besoin via la recherche.
Le point faible du dépôt est un biais notable envers la stack .NET dans les sections spécifiques aux frameworks. Des bibliothèques comme Steeltoe, MassTransit ou CAP y sont fréquemment mentionnées. Cependant, les concepts fondamentaux sont les mêmes partout. Ils fonctionnent pour des projets en Go, Java, Python ou TypeScript.
Comment utiliser le catalogue en pratique
- Préparation aux entretiens de System Design. La collection couvre la plupart des questions posées dans les sections architecturales.
- Référence pour la conception de systèmes. Aide à se rafraîchir la mémoire sur la différence entre les actors et les services classiques, ou à choisir le bon pattern de messagerie.
- Intégration et formation d'équipe. Les liens du dépôt fonctionnent comme une liste de lecture pour immerger les développeurs dans l'architecture du projet.
Le dépôt awesome-software-architecture sera utile pour les développeurs qui passent de l'écriture de fonctions à la conception de systèmes. Ajoutez le projet en favori pour que le bon article sur les patterns soit toujours à portée de main.
Projets similaires