原则29:允许两个组件通过#include指令彼此"知道"隐含了循环物理依赖。
定义26:如果一个子系统可编译,并且单个组件(包括.c文件)的包含指令隐含的依赖图是非循环的,则称这个子系统是可层次化的。
原则30:相关抽象接口中的内在耦合使它们更抗拒层次分解。
定义27:如果组件y处在比组件x更高的层次上,并且y在物理上依赖x,则称组件y支配(dominate)组件x。
原则31:如果同层次的组件是循环依赖的,那么就有可能把互相依赖的功能从每一个组件升级为一个潜在的新的更高层次的组件(依赖于每一个初始的组件)的静态成员。
原则32:在庞大的低层子系统中的循环物理依赖将最大程度的增加维护系统的总开销。
原则33:如果同一层次的组件是循环依赖的,那么就有可能把互相依赖的功能从每一个组件降到一个潜在的新的较低级(共享)组件中,每一个原来的组件都依赖于这个新组件。
原则34:将共有代码降级可促成独立重用。
原则35:可以将升级策略与基础设施降级结合起来,以增强独立重用。
原则36:把一个具体的类分解为两个包含更高和更低层次功能的类可以促进层次化。
原则37:将一个抽象的基类分解成两个类--一个定义一个纯粹的接口,另一个定义它的部分的实现,可以促进层次化。
原则38:把一个系统分解成更小的组件,既可以使它更灵活,也可以使它更复杂,因为现在要与更多的物理部件一起工作了。