模式1:Manage Relationships

关系管理:设计模块间的关系。 如过一个模块中的某个类引入了两外一个模块中的一个或者一个以上的类,则两个模块之间存在关系。 换句话说:如果模块2内容的改变会影响模块1,则模块1对模块2具有一个物理依赖。 模块之间可以有直接依赖,也可以有间接依赖,或称为传递依赖。具有大量引入依赖(incoming dependencies)的模块,应该是稳定的。保证一个模块稳定的最好方法是使之成为Abstract Module。


模式16:Colocate Exception

异常类放置的位置应该靠近抛出该异常的接口或者类。 对于异常的处理,往往都是在系统开发的后期才做的,或者说对于某个功能来说,认真考虑该功能可能抛出的异常及其处理,一般都是在该功能实现的后期才做的。这个时候就会涉及到异常类摆放在哪的问题。异常类的摆放会影响系统的模块化程度,更具体来说,会影响系统模块间的依赖结构。比如错误的将异常放置在捕获异常的模块里,就容易造成循环依赖:捕获异常的模块依赖抛出异常的模块;而抛出异常的模块因为异常类定义在捕获异常的模块里,所以它又不得不依赖于后者,造成循环依赖。


模式4:Acyclic Relationships

模块关系中不能存在循环依赖. 当在两个系统模块之间定义关系的时候,它们的耦合度会增加。因为模块需要互相协作来完成任务,所以一定程度的耦合是必须的。但是,循环依赖需要避免。如何判定一个依赖是循环的呢?对于一个模块A,将A直接或者间接依赖的所有模块依次加入集合中,如果发现A再次被加入集合,那么说明模块结构中存在循环依赖。