Dependency Direction¶
Dependencies should point toward stability - volatile components should depend on stable components, never the reverse
Tension Addressed¶
Coupling vs. Flexibility
Recognizable As¶
Core business logic with no outward dependencies; plugins depending on the application, not vice versa; abstract interfaces owned by inner layers; import statements pointing toward abstractions
Canonical Sources¶
Martin, "Clean Architecture" (2017); Martin, "Agile Software Development" (2002)
Transfers To¶
Organizational Design (reporting structures), Supply Chain (supplier relationships), Build Systems (compilation order), Package Management (version constraints)
Sub-concepts: - Stable Dependencies Principle: Depend in the direction of stability - Stable Abstractions Principle: Stable components should be abstract - Dependency Inversion Principle: High-level policy should not depend on low-level detail
Related Concepts¶
- Coupling - Software Architecture
- Dependency Inversion Principle - Software Design