Clean Architecture, formulated by Robert C. Martin, organises code into concentric layers whose dependencies point only inward toward the domain. Business rules sit at the centre, independent of frameworks, UI, and databases at the outer edges. The Dependency Rule keeps the core testable and insulated from external change.
Clean Architecture
Details
- Full Name
-
Clean Architecture according to Robert C. Martin
Core Concepts:
- The Dependency Rule
-
Dependencies only point inward
- Concentric circles
-
Entities → Use Cases → Interface Adapters → Frameworks & Drivers
- Independent of frameworks
-
Architecture doesn’t depend on libraries
- Testable
-
Business rules testable without UI, database, or external elements
- Independent of UI
-
UI can change without changing business rules
- Independent of database
-
Business rules not bound to database
- Independent of external agencies
-
Business rules don’t know about outside world
- Screaming Architecture
-
Architecture reveals the intent of the system
- SOLID principles
-
Foundation of the architecture
- Key Proponent
-
Robert C. Martin ("Uncle Bob")
When to Use:
-
Enterprise applications with complex business logic
-
Systems requiring long-term maintainability
-
When team size and turnover are high
-
Projects where business rules must be protected from technology changes
Criticism:
-
Jimmy Bogard, "Vertical Slice Architecture" (2018) — calls the "traditional layered/onion/clean architecture" monolithic in its approach and appropriate for only a minority of requests, criticizing mock-heavy tests and abstractions "around concepts that really shouldn’t be abstracted"; his alternative is Vertical Slice Architecture
-
Derek Comartin, "'Clean Architecture' and indirection. No thanks." (CodeOpinion) — dismisses canonical Clean Architecture examples as "useless indirection": the layering adds cost without paying for itself in typical systems
-
The critiques converge: the dependency rule imposes a fixed indirection tax on every feature, while most changes cut across all layers anyway — the coupling Vertical Slice Architecture organizes around instead