Stable dependencies principle
The stable dependencies principle (DIP) is a package design principle that demands that frequently changing components depend on more stable ones.
Part of the volatility of a component is naturally implied by its responsibility. But stability in this context is also a function of incoming and outgoing dependencies. A component that is heavily depended on by others is harder to change and considered to be more stable. A component that heavily depends on others has more reasons to change and is considered to be less stable.
So, with regard to dependence, a component with many clients should not depend on one with many dependencies. A single component with both of these properties is a code smell. Such a component has many reasons to change, and at the same time it is hard to change.
The stable dependencies principle is closely related to the stable abstractions principle. Taken together, they amount to a more refined version of the dependency inversion principle.
This is one of Robert C Martin’s six package principles.