dependency inversion principle
Business rules depend on an interface they own, and the low-level details implement it.
High-level modules should not depend on low-level modules; both depend on abstractions owned by the high-level side, so the source dependency points from the detail to the rule.
See also