Les modèles d’architecture à travers Python
(cosmicpython.com)- Un livre dans lequel Harry, auteur de "TDD with Python", et Bob, architecte logiciel, expliquent comment comprendre et maîtriser des architectures logicielles complexes
- Il partage une synthèse de techniques d’architecture réellement utilisées dans une entreprise d’e-commerce
MADE.comest une entreprise européenne de vente de meubles en ligne, qui exploite une chaîne d’approvisionnement mondiale- Son objectif est de minimiser les stocks grâce à l’optimisation logistique, et de coordonner l’arrivée de la logistique avec les commandes des consommateurs
- Mais le monde réel est complexe et imprévisible, ce qui les conduit à construire des logiciels intelligents qui reflètent cette réalité afin d’automatiser ces processus
- Ce livre traite des modèles d’architecture conçus pour résoudre ce type de problèmes concrets
Pourquoi Python
- Python est un langage en forte croissance à l’échelle mondiale et s’attaque de plus en plus à des problèmes d’entreprise complexes
- La plupart des livres d’architecture existants utilisent des exemples en Java ou en C#, ce qui les rend moins accessibles aux utilisateurs de Python
- Ce livre présente les modèles d’architecture classiques d’une manière adaptée à la communauté Python
Introduction au TDD, au DDD et à l’architecture orientée événements
- TDD (Test-Driven Development):
- Le développement piloté par les tests permet de refactorer en toute sécurité et d’ajouter des fonctionnalités plus facilement
- Il faut privilégier des tests unitaires rapides et sans dépendances, et réduire au minimum les tests end-to-end, lents et instables
- DDD (Domain-Driven Design):
- L’accent est mis sur le modèle métier, mais il est important de réduire la dépendance à l’infrastructure et aux frameworks
- Architecture orientée événements:
- La communication par messages entre microservices permet de maîtriser la complexité
- Il faut réfléchir à la manière de l’intégrer avec les outils Python existants comme Flask, Django et Celery
Remarque : la plupart des modèles présentés dans ce livre s’appliquent aussi à une architecture monolithique
- L’objectif de ce livre est de présenter, en Python, des modèles d’architecture qui prennent en charge le TDD, le DDD et les services orientés événements, ainsi que leur mise en œuvre
Public visé par ce livre
- Des développeurs ayant déjà travaillé sur des applications Python complexes
- Aucune connaissance préalable des modèles d’architecture ou du DDD n’est nécessaire
- L’ouvrage est conçu pour être suivi même sans habitude du style TDD, qui consiste à écrire les tests avant l’implémentation
- Flask, SQLAlchemy, pytest, Docker et Redis sont utilisés, mais ce ne sont pas des prérequis
- L’objectif est une conception d’architecture indépendante des technologies, et non centrée sur une technologie particulière
Aperçu du contenu d’apprentissage
Part 1
- Modélisation de domaine et DDD (chapitres 1, 2 et 7)
- Présentation de la manière de construire un modèle de domaine sans dépendances externes
- Méthodes pour écrire des tests unitaires rapides et réflexion sur leur lien avec l’intégrité des données
- Explication de la manière de choisir le bon Aggregate
- Modèles Repository, Service Layer et Unit of Work (chapitres 2, 4 et 5)
- Abstraction de la couche de persistance afin de séparer le modèle des dépendances externes
- Conception d’une couche de services comme point d’entrée du système
- Adapté à la création de points d’entrée légers comme une API Flask ou une CLI
- Réflexions sur les tests et l’abstraction (chapitres 3 et 5)
- Exploration des critères et du rôle dans le choix du bon niveau d’abstraction
- Écriture de tests unitaires à un niveau d’abstraction élevé pour atteindre une pyramide de tests équilibrée
Part 2
- Architecture orientée événements (chapitres 8 à 11)
- Présentation des modèles Domain Events, Message Bus et Handler
- Les interactions au sein du système sont déclenchées par des événements
- Explication de la manière d’intégrer des microservices via les événements
- Distinction entre commande (
command) et événement (event) - L’ensemble de l’application évolue vers un système de traitement de messages
- CQRS (Command-Query Responsibility Segregation) (chapitre 12)
- Présentation de l’efficacité structurelle permise par la séparation des responsabilités entre commandes et requêtes
- Inclut des exemples d’implémentation avec ou sans utilisation d’événements
- Injection de dépendances (chapitre 13)
- Clarification des dépendances explicites et implicites
- Implémentation d’un framework simple d’injection de dépendances
Annexes et guide pratique
- Comment l’appliquer à un projet existant (épilogue)
- Appliquer ces modèles à un système existant est plus difficile que sur un exemple simple
- Le livre fournit des stratégies d’application et des ressources de référence pour cela
- Exercices de code et exemples GitHub
- L’ensemble du contenu du livre est réuni dans un seul projet d’exemple
- Le code est fourni chapitre par chapitre via des branches GitHub
- Méthodes de pratique :
- Reproduire soi-même l’application d’exemple
- Essayer d’appliquer les modèles à son propre projet
- Utiliser les "Exercise for the Reader" de chaque chapitre pour écrire du code d’entraînement
Astuce : il est recommandé, au début de chaque chapitre, de faire un checkout de la branche GitHub correspondante afin d’apprendre avec du code réellement fonctionnel
2 commentaires
Il existe une édition en coréen : Architecture Patterns with Python
Avis Hacker News
Ce livre est une véritable mine d’or sur les patterns d’architecture. J’apprécie le fait qu’il rende le sujet facile à comprendre
Une partie de ce livre est très utile, surtout lorsqu’il traite de concepts qui ne sont pas limités à Python ou à un langage particulier
Je vois Python comme un bon langage de glue
Je suis développeur TypeScript, mais ce livre fait partie de mes livres d’architecture préférés. Je m’y réfère en permanence
J’ai commencé à écrire du Python professionnellement il y a quelques années. Je venais de Kotlin et de TypeScript, et même si le langage était facile d’accès, j’avais du mal à obtenir un couplage faible et une bonne testabilité
C’est vraiment l’un des excellents livres de programmation Python. J’ai regretté l’absence de typage statique dans le code, mais c’était un choix délibéré des auteurs
Merci pour le partage de cette excellente ressource
J’ai lu l’édition papier de ce livre il y a deux ans et demi ou trois ans. J’ai beaucoup apprécié. Il garde les tests comme sujet de premier plan et se met continuellement à jour avec chaque ajout
Il n’y a aucune mention de Polylith. Je me demande si c’est pertinent
Ce livre était une excellente lecture. Je travaillais il y a trois ans dans un environnement DDD en C#/.NET, et revisiter maintenant ces concepts en Python m’aide à en distiller l’essentiel