Go with the Domain: Erstellung moderner Geschäftssoftware in Go
Go with the Domain: Erstellung moderner Geschäftssoftware in Go
Zusammenfassung:
Einleitung
Das Buch „Go with the Domain: Building Modern Business Software in Go“ (Autoren: Robert Laszczak, Miłosz Smółka, 2021, 298 Seiten) ist nicht nur ein weiteres Tutorial zur Go-Syntax. Es ist ein praktischer Leitfaden zur Anwendung von Domain-Driven Design (DDD) und den Prinzipien der Clean Architecture im Go-Ökosystem. Zum Zeitpunkt seiner Veröffentlichung war es eines der ersten Bücher, das die Philosophie der domänengesteuerten Entwicklung systematisch mit idiomatischem Go verband und dabei übermäßige Abstraktion und „Overengineering“ vermied. Es richtet sich an Entwickler, die bereits in Go schreiben und von „einfach funktionierendem Code“ zu wartbaren, testbaren und skalierbaren Geschäftsanwendungen übergehen möchten.
Worum es in diesem Buch geht
Das Buch ist um ein reales Beispiel aufgebaut – ein Auftragsverwaltungssystem (Order Management System). Die Autoren führen den Leser Schritt für Schritt durch alle Phasen: von der Identifizierung begrenzter Kontexte (Bounded Contexts) und der Modellierung von Domänenereignissen bis hin zur Implementierung von Repositories, Services und Transportschichten (HTTP, gRPC, Message Queues). Besonderes Augenmerk liegt auf der Idiomatik des Codes: Die Autoren zeigen, wie man Go-Interfaces zur Definition von Ports und Adaptern nutzt, wie man ein „anämisches Modell“ vermeidet und wie man Pakete richtig organisiert, um die Domänengrenzen nicht zu verletzen. Jedes Kapitel enthält praktische Beispiele, Diagramme und Vergleiche von „schlechtem“ und „gutem“ Code.
Für wen ist dieses Buch geeignet
- Go-Entwickler mit mindestens 1 Jahr Erfahrung, die tiefer in die Architektur eintauchen möchten.
- Softwarearchitekten, die nach konkreten Mustern für die Umsetzung von DDD in Go suchen.
- Tech-Leads und Teamleiter, die für das Design von Microservices verantwortlich sind.
- Entwickler, die von anderen Sprachen (Java, C#) zu Go wechseln und DDD ohne „schwere Frameworks“ anwenden möchten.
Was der Leser lernen wird
- Grundlagen von DDD in Bezug auf Go: Entity, Value Object, Aggregate, Domain Event, Repository, Factory.
- Clean Architecture (Hexagonale Architektur) in Go: Wie man Domäne, Anwendung und Infrastruktur trennt.
- Testen der Domänenlogik ohne Mocks, unter Verwendung von Tabellentests und Interfaces.
- Arbeit mit Transaktionen und Nebenläufigkeit im Kontext von DDD (Unit of Work Pattern).
- Integration mit externen Systemen über Port-Adapter (HTTP, gRPC, Kafka).
- Code-Organisation in Monorepos und Go-Modulen.
- Fehlerbehandlung in der Domäne: Erstellung eigener Fehlertypen, kontextbezogene Fehler.
- Event Sourcing und CQRS – grundlegende Einführung und Implementierungsbeispiel.
Stärken
- Praktische Ausrichtung: Der Code aus dem Buch kann direkt an die eigenen Projekte angepasst werden.
- Idiomatik: Die Autoren zwingen keinen Java-Stil auf, sondern zeigen, wie DDD „auf Go-Art“ aussieht (kleine Interfaces, Komposition, explizite Abhängigkeiten).
- Klare Struktur: Jedes Kapitel endet mit einer Zusammenfassung und einer Liste „Was man sich merken sollte“.
- Fokus auf Testen: Ein ganzes Kapitel ist dem Testen der Domäne und der Infrastruktur gewidmet.
- Aktualität: Das Buch verwendet Go-Module, context.Context, Middleware, Generics (obwohl vor Go 1.18 erschienen – die Autoren geben aber Anpassungstipps).
Empfehlung
Das Buch ist ein Muss für alle, die in Go komplexe Geschäftssysteme (ERP, CRM, Fintech, Logistik, Marktplätze) entwickeln. Es ist sowohl für diejenigen nützlich, die gerade erst mit DDD beginnen, als auch für erfahrene Praktiker, die den „goldenen Mittelweg“ zwischen reinem DDD und Go-Pragmatismus sehen möchten. Wenn Sie „Gott-Services“ leid sind und Code schreiben möchten, der sich leicht an neue Geschäftsanforderungen anpassen lässt – dann ist dieses Buch genau das Richtige für Sie.
Empfehlungen
Professionelles Rust: Fortgeschrittene Techniken
PHP und Docker: Containerisierung von Anwendungen
Leistung von PHP-Anwendungen: Optimierung und Skalierung
DevOps für JavaScript (Node.js) Entwickler
Move-Semantik in C++. Das vollständige Handbuch
Praktisches PHP 7, MySQL 8 und MariaDB: Erstellung von Web-Datenbanken