Nx im Zusammenspiel mit Domain-Driven Design
Domain-Driven Design
Die Ausgangssituation kennen wir alle: Wir bekommen eine Anforderung, eine neue Journey, ein neues Feature. In einer Analysephase erarbeiten wir die fachlichen Anforderungen, die Entitäten, die Services, die Schnittstellen. Wir modellieren die Domäne, und wir definieren die Grenzen der einzelnen Bounded Contexts. Ebenso gleichen wir unser Verständnis mit den Stakeholdern ab, um sicherzustellen, dass wir die fachlichen Anforderungen korrekt verstanden haben.
Gemeinsame Sprache ist hierbei essenziell. Wir definieren die Begriffe, die wir in der Domäne verwenden, und sorgen dafür, dass alle Beteiligten dieselbe Sprache sprechen.
Nx zur Übersetzung der fachlichen Struktur
In den letzten Jahren kam man im Angular-Kosmos kaum an einer Konferenz vorbei, auf der nicht über DDD in der Softwareentwicklung referiert wurde. Wir haben den Ansatz umgesetzt. Das Monorepo löst hierbei mehrere Herausforderungen für uns:
- In einem Multibrand-Kontext können wir die fachlichen Grenzen der einzelnen Marken in der Struktur des Monorepos abbilden.
- Das Theming bringen UI-Libraries mit, die von den Feature-Libraries genutzt werden.
- Feature-Libraries sichern Kleinteiligkeit und klare Abgrenzung – unabhängig von Clean-Code-Prinzipien oder CI/CD-Optimierung.
- Shared-Libraries sichern die Wiederverwendbarkeit fachlicher Komponenten, die in mehreren Bounded Contexts genutzt werden.
- Boundary-Tags sichern automatisiert die Abhängigkeiten zwischen den einzelnen Bounded Contexts. So stellen wir sicher, dass die fachlichen Grenzen eingehalten werden, und unterbinden zirkuläre Abhängigkeiten.
- In einer Standalone-Angular-Anwendung strukturieren Apps und Libs zudem die Abhängigkeiten – eine Struktur, die das Framework seit dem Wegfall der NgModules nicht mehr vorgibt.
Fazit
Nx ist ein zentrales Tool in unserem alltäglichen Entwicklungsprozess. Die genannten Vorteile helfen uns, die fachlichen Anforderungen korrekt umzusetzen und die Struktur des Monorepos an die fachlichen Grenzen der Domäne anzupassen. Durch die Kombination von Domain-Driven Design und Nx können wir sicherstellen, dass unsere Softwarearchitektur den fachlichen Anforderungen entspricht und gleichzeitig eine hohe Qualität und Wartbarkeit gewährleistet ist. Zum Ausblick: Diese Struktur hilft auch Agenten, die Idee unserer Architektur zu verstehen, und bietet einen Rahmen für agentische Implementierung.