Separation of Concerns¶
Organizing code so that each component addresses a single concern reduces cognitive load, enables parallel development, and localizes the impact of changes.
Tension Addressed¶
Abstraction vs. Concreteness
Recognizable As¶
MVC/MVP patterns, aspect-oriented programming, microservices, layered architecture, cross-cutting concerns
Canonical Sources¶
Edsger Dijkstra, "On the role of scientific thought" (1974); Parnas, module decomposition (1972)
Transfers To¶
Architecture (system decomposition), Database Design (normalization), UI Design (separation of presentation and logic), Infrastructure (separation of compute and storage)
The challenge is identifying what constitutes a "concern" - this requires domain understanding, not just technical partitioning.
Related Concepts¶
- Abstraction - Software Architecture
- Layered Architecture - Software Architecture
- Separation of Concerns - Software Architecture (cross-domain)