Architekturmuster mit Python kennenlernen
(cosmicpython.com)- Ein Buch, in dem Harry, der Autor von "TDD with Python", und der Softwarearchitekt Bob erklären, wie man komplexe Softwarearchitekturen versteht und beherrscht
- Es fasst Architekturtechniken zusammen, die in einem E-Commerce-Unternehmen tatsächlich eingesetzt wurden, und stellt sie vor
MADE.comist ein in Europa ansässiger Online-Möbelhändler mit globaler Lieferkette- Ziel ist es, durch Logistikoptimierung die Lagerbestände zu minimieren und den Wareneingang so zu koordinieren, dass er gleichzeitig mit den Kundenbestellungen erfolgt
- Da die reale Welt jedoch komplex und unvorhersehbar ist, wird intelligente Software entwickelt, die dies abbildet und automatisiert
- Dieses Buch behandelt Architekturmuster, die entwickelt wurden, um genau solche Praxisprobleme zu lösen
Warum Python?
- Python ist eine Sprache mit starkem weltweiten Wachstum und stellt sich zunehmend komplexen Enterprise-Problemen
- Bestehende Architekturbücher verwenden meist Beispiele auf Basis von Java oder C#, was den Zugang für Python-Nutzer erschwert
- Dieses Buch stellt klassische Architekturmuster in einer Form vor, die zur Python-Community passt
Einführung in TDD, DDD und ereignisgesteuerte Architektur
- TDD (Test-Driven Development):
- Testgetriebene Entwicklung ermöglicht sicheres Refactoring und das Hinzufügen neuer Funktionen
- Schnelle, von Abhängigkeiten freie Unit-Tests sollten priorisiert und langsame, instabile End-to-End-Tests auf ein Minimum reduziert werden
- DDD (Domain-Driven Design):
- Der Fokus liegt auf dem Business-Domänenmodell, zugleich ist es wichtig, die Abhängigkeit von Infrastruktur und Frameworks zu verringern
- Ereignisgesteuerte Architektur:
- Nachrichtenbasierte Kommunikation zwischen Microservices hilft, Komplexität zu beherrschen
- Man muss überlegen, wie sich das mit bestehenden Python-Werkzeugen wie Flask, Django und Celery integrieren lässt
Hinweis: Die meisten in diesem Buch behandelten Muster lassen sich auch auf monolithische Architekturen anwenden
- Ziel dieses Buches ist es, Architekturmuster vorzustellen, die in Python TDD, DDD und ereignisgesteuerte Services unterstützen, und zu zeigen, wie sie angewendet werden
Zielgruppe dieses Buches
- Entwickler mit Erfahrung im Umgang mit komplexen Python-Anwendungen
- Vorkenntnisse zu Architekturmustern oder DDD sind nicht erforderlich
- Es ist so aufgebaut, dass man auch ohne Vertrautheit mit einem TDD-Stil, bei dem zuerst Tests geschrieben und dann implementiert wird, gut folgen kann
- Verwendet werden Flask, SQLAlchemy, pytest, Docker und Redis, dies ist jedoch kein Pflichtwissen
- Das Ziel ist ein technologieunabhängiger Architekturentwurf statt einer an einzelne Technologien gebundenen Sicht
Überblick über die Lerninhalte
Part 1
- Domänenmodellierung und DDD (Kapitel 1, 2, 7)
- Einführung, wie man ein Domänenmodell ohne externe Abhängigkeiten aufbaut
- Wie man schnelle Unit-Tests schreibt und dabei den Zusammenhang zur Datenintegrität berücksichtigt
- Erläuterung, wie man ein geeignetes Aggregate auswählt
- Repository-, Service-Layer- und Unit-of-Work-Muster (Kapitel 2, 4, 5)
- Abstraktion der Persistenzschicht, um das Modell von externen Abhängigkeiten zu trennen
- Entwurf einer Service-Schicht als Einstiegspunkt ins System
- Gut geeignet für schlanke Einstiegspunkte wie eine Flask API oder eine CLI
- Überlegungen zu Tests und Abstraktion (Kapitel 3, 5)
- Untersuchung von Kriterien und Rolle geeigneter Abstraktionsebenen
- Unit-Tests auf höherem Abstraktionsniveau schreiben, um eine Testpyramide zu erreichen
Part 2
- Ereignisgesteuerte Architektur (Kapitel 8–11)
- Einführung in Domain-Events-, Message-Bus- und Handler-Muster
- Interaktionen im System werden durch Ereignisse ausgelöst
- Erläuterung, wie sich Microservices mithilfe von Ereignissen integrieren lassen
- Unterscheidung zwischen Befehlen (command) und Ereignissen (event)
- Die gesamte Anwendung wird zu einem System zur Nachrichtenverarbeitung
- CQRS (Command-Query Responsibility Segregation) (Kapitel 12)
- Einführung in strukturelle Effizienz durch die Trennung von Befehls- und Abfrageverantwortung
- Einschließlich Implementierungsbeispielen mit und ohne Einsatz von Ereignissen
- Dependency Injection (Kapitel 13)
- Ordnung expliziter und impliziter Abhängigkeiten
- Implementierung eines einfachen Dependency-Injection-Frameworks
Anhang und Praxisleitfaden
- Anwendung auf bestehende Projekte (Epilog)
- Das Anwenden von Mustern auf bestehende Systeme ist schwieriger als auf einfache Beispiele
- Dafür werden Strategien zur Einführung und Referenzmaterial bereitgestellt
- Code-Übungen und GitHub-Beispiele
- Der gesamte Inhalt des Buches ist in einem einzigen Beispielprojekt zusammengeführt
- Zu jedem Kapitel wird Code über einen GitHub-Branch bereitgestellt
- Übungsformen:
- Die Beispielanwendung selbst nachbauen
- Versuchen, die Muster im eigenen Projekt anzuwenden
- Mit den "Exercise for the Reader"-Aufgaben jedes Kapitels Übungscode schreiben
Tipp: Es empfiehlt sich, zu Beginn jedes Kapitels den entsprechenden Branch auf GitHub zu checkouten und zusammen mit dem tatsächlich lauffähigen Code zu lernen
2 Kommentare
Es gibt eine koreanische Ausgabe: Architekturpattern mit Python
Hacker-News-Kommentare
Dieses Buch ist wie eine Goldgrube für Architektur-Patterns. Mir gefällt, dass man die Themen leicht verstehen kann.
Teile dieses Buchs sind sehr nützlich. Vor allem dann, wenn es um Konzepte geht, die nicht auf Python oder eine bestimmte Sprache beschränkt sind.
Ich sehe Python als gute Glue Language.
Ich bin TypeScript-Entwickler, aber dieses Buch gehört zu meinen liebsten Büchern über Architektur. Ich schaue immer wieder hinein.
Ich habe vor einigen Jahren begonnen, beruflich Python zu schreiben. Ich komme aus Kotlin und TypeScript, und obwohl die Sprache leicht zugänglich war, hatte ich Schwierigkeiten, lose Kopplung und Testbarkeit zu erreichen.
Das ist wirklich eines der großartigsten Bücher über Python-Programmierung. Ich fand es nur schade, dass im Code kein statisches Typing verwendet wurde, aber das war eine bewusste Entscheidung der Autoren.
Danke fürs Teilen dieses großartigen Materials.
Ich habe das Paperback dieses Buchs vor zweieinhalb oder drei Jahren gelesen. Es hat mir sehr viel Freude gemacht. Es hält Tests als Thema erster Klasse aufrecht und wird mit jeder Ergänzung kontinuierlich aktualisiert.
Es gibt keine Erwähnung von Polylith. Ich frage mich, ob das relevant ist.
Dieses Buch war eine großartige Lektüre. Ich habe vor drei Jahren in einem C#/.NET-DDD-Umfeld gearbeitet und besuche diese Konzepte jetzt in Python erneut, wobei ich das Wesentliche herausfiltere.