5 Punkte von GN⁺ 2025-03-29 | 2 Kommentare | Auf WhatsApp teilen
  • 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.com ist 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

 
xguru 2025-03-29

Es gibt eine koreanische Ausgabe: Architekturpattern mit Python

 
GN⁺ 2025-03-29
Hacker-News-Kommentare
  • Dieses Buch ist wie eine Goldgrube für Architektur-Patterns. Mir gefällt, dass man die Themen leicht verstehen kann.

    • In der Praxis können solche Patterns jedoch Komplexität und Performance-Probleme verursachen. Besonders wenn man bereits meinungsstarke Frameworks wie Django verwendet.
    • Ich habe Python sowohl in großen als auch in kleinen Unternehmen eingesetzt. In großen Unternehmen, die strenge Architektur-Patterns verwenden, ist der Code zwar „sauber“, aber zu komplex und langsam.
    • Dagegen war der Code in großen Unternehmen, die Patterns ignoriert haben, wirklich chaotisch, aber die Produktivität war hoch. Auch wenn der Code unordentlich war, konnte man ihn lesen, verstehen und ändern.
    • Vielleicht sagt das mehr über mich selbst aus, aber ich war in Unternehmen mit unstrukturiertem Code produktiver. Ich konnte Diskussionen über „sauberen“ Code vermeiden.
  • 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.

    • Andere Teile sind jedoch problematisch. Es kann gefährlich sein, wenn unerfahrene Entwickler versuchen, alles auf einmal umzusetzen.
    • Zum Beispiel ist das Repository-Pattern im Allgemeinen nützlich, fügt aber in vielen Fällen, auch in den Beispielen des Buchs, nur zusätzliche Komplexität hinzu.
    • Service-Layer und Unit of Work sind für komplexe Anwendungen nützlich, können aber in Systemen aus kleinen Services übermäßig aufgebläht wirken.
    • Design-Patterns sind wie andere Werkzeuge: Man muss verstehen, wann man sie einsetzen sollte und wann nicht. Das Buch gibt dazu Hinweise, aber das müsste stärker betont werden.
  • Ich sehe Python als gute Glue Language.

    • Als Gegenentwurf zu erzwungenem OOP-Denken. Als Gegenentwurf zu dem Zwang, alles in Kapselung und Vererbung zu pressen.
    • Als Gegenentwurf zu SOLID, Clean Coding, Clean Architecture, GoF-Patterns und Uncle Bob.
    • Ich folge einem imperativen oder funktionalen Flow und verwende so wenig OOP wie möglich.
    • Wenn ich Python verwende, möchte ich eine Erfahrung ohne Objekte und Patterns.
    • Das heißt nicht, dass dieses Buch wertlos ist. Es ist nützlich, um Patterns zu lernen. Aber man sollte nicht versuchen, alles auf die reale Programmierung zu übertragen.
  • Ich bin TypeScript-Entwickler, aber dieses Buch gehört zu meinen liebsten Büchern über Architektur. Ich schaue immer wieder hinein.

    • Für Tests verwende ich geradezu religiös das Fake-Unit-of-Work-/Service-Pattern. Es hilft dabei, Third-Party-Services zu faken.
    • Ich empfehle, Events domänenspezifisch zu benennen. Das löst den Teil, der Teamkollegen sonst mühsam erklärt werden muss.
    • Cosmic Python ist vollständig online verfügbar und daher leicht zu verlinken. Insgesamt eine hervorragende und prägende Ressource.
  • 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.

    • Auf Empfehlung eines Kollegen habe ich dieses Buch gekauft und von Anfang bis Ende gelesen. Es hat mir geholfen zu verstehen, wie man Komplexität in komplexen Python-Codebasen beherrscht.
    • Ich folge nicht allen Patterns, aber ich habe die Möglichkeiten kennengelernt und verstanden, wie man Erfahrungen aus anderen Paradigmen auf Python anwenden kann.
    • Klare Empfehlung. Es lohnt sich.
  • 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.

    • Wenn Tests vorhanden sind, leicht zu schreiben und leicht zu aktualisieren sind, macht das den Entwicklungsprozess angenehmer. Man muss den Code seltener manuell ausführen, um Probleme zu überprüfen.
    • Der ereignisorientierte Teil war interessant, aber in meiner aktuellen Arbeit nicht praktisch genug, um ihn umzusetzen.
  • 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.

    • Wenn dich Themen wie diese interessieren, kann ich es nur wärmstens empfehlen.