Book Profile
Clean Architecture A Craftsmans Guide to Software Structure and Design (Robert C. Martin Series)
Robert C. Martin · 2017
A distillation of timeless, paradigm-independent rules of software architecture that show how to structure systems so that policy is separated from detail, dependencies point toward high-level business rules, and options are kept open for as long as possible.
Get the book →Drawing on more than half a century of building systems of every kind, Robert C. Martin argues that the rules of good software architecture are universal and unchanging because the fundamental building blocks of programs (sequence, selection, iteration) have not changed. Clean Architecture teaches you to see architecture as the art of drawing boundaries: separating high-level business policy (Entities and Use Cases) from low-level implementation details (databases, frameworks, the web, the UI) so that details become plugins to policy. Through the SOLID principles, component cohesion and coupling principles, and the Dependency Rule, the book shows how to build systems that are testable, independently deployable, easy to change, and cheap to maintain over long, profitable lifetimes. Rich with war stories from decades of real projects, it makes a compelling case that the only way to go fast is to go well.
What it argues
A causal model expressing how architectural design levers (boundary discipline, dependency direction, policy/detail separation, deferral of detail decisions) shape psychological/behavioral states of the development effort (changeability, testability, developer productivity) and drive outcomes such as lifetime maintenance cost and system longevity, moderated by contextual conditions like team structure and system complexity.
Key ideas it contributes
- Architectural Boundary Discipline — The rigor with which a system is divided by boundaries that separate elements along axes of change and restrict cross-boundary knowledge.
- Dependency Direction Management (Dependency Rule) — The degree to which source code dependencies point inward toward higher-level, more abstract, more stable policies.
- Policy/Detail Separation — Isolation of high-level business rules from low-level mechanisms so details are replaceable plugins to policy.
- Deferral of Detail Decisions (Keeping Options Open) — The practice of delaying commitments to specific detail technologies for as long as possible.
- Component Cohesion and Coupling Quality — How well classes are grouped into components that change and are reused together and are coupled acyclically toward stability and abstraction.
- System Changeability (Softness) — The ease with which the system's behavior can be modified with difficulty proportional to change scope rather than shape.
- Testability — The degree to which business rules can be verified without external agencies (UI, DB, web, frameworks).
- Independent Deployability and Developability — The capacity for components to be developed by separate teams and deployed independently.