Clean Architecture, formuliert von Robert C. Martin, ordnet Code in konzentrische Schichten, deren Abhängigkeiten nur nach innen zur Domäne zeigen. Die Geschäftsregeln liegen im Zentrum, unabhängig von Frameworks, UI und Datenbanken am äußeren Rand. Die Dependency Rule hält den Kern testbar und schützt ihn vor Änderungen von außen.
Clean Architecture
Details
- Vollständiger Name
-
Clean Architecture nach Robert C. Martin
Kernkonzepte:
- Die Abhängigkeitsregel
-
Abhängigkeiten zeigen nur nach innen
- Konzentrische Kreise
-
Entities → Use Cases → Interface Adapters → Frameworks & Drivers
- Unabhängig von Frameworks
-
Architektur hängt nicht von Bibliotheken ab
- Testbar
-
Geschäftsregeln testbar ohne UI, Datenbank oder externe Elemente
- Unabhängig von UI
-
UI kann sich ändern, ohne Geschäftsregeln zu ändern
- Unabhängig von Datenbank
-
Geschäftsregeln nicht an Datenbank gebunden
- Unabhängig von externen Stellen
-
Geschäftsregeln wissen nichts über die Außenwelt
- Screaming Architecture
-
Architektur offenbart die Absicht des Systems
- SOLID-Prinzipien
-
Grundlage der Architektur
- Schlüsselvertreter
-
Robert C. Martin ("Uncle Bob")
Wann zu verwenden:
-
Unternehmensanwendungen mit komplexer Geschäftslogik
-
Systeme, die langfristige Wartbarkeit erfordern
-
Wenn Teamgröße und Fluktuation hoch sind
-
Projekte, bei denen Geschäftsregeln vor Technologieänderungen geschützt werden müssen
Kritik:
-
Jimmy Bogard, "Vertical Slice Architecture" (2018) — nennt die "traditionelle Layered/Onion/Clean Architecture" monolithisch im Ansatz und nur für eine Minderheit der Requests angemessen; er kritisiert mock-lastige Tests und Abstraktionen "um Konzepte, die nicht abstrahiert gehören"; seine Alternative ist Vertical Slice Architecture
-
Derek Comartin, "'Clean Architecture' and indirection. No thanks." (CodeOpinion) — tut kanonische Clean-Architecture-Beispiele als "nutzlose Indirektion" ab: Die Schichtung kostet, ohne sich in typischen Systemen zu bezahlen
-
Die Kritiken laufen zusammen: Die Dependency Rule erhebt auf jedes Feature eine fixe Indirektions-Steuer, während die meisten Änderungen ohnehin durch alle Schichten schneiden — genau die Kopplung, um die Vertical Slice Architecture stattdessen organisiert