模式1:Manage Relationships

 由  罗俊杰 发布

描述

关系管理:设计模块间的关系。

如过一个模块中的某个类引入了两外一个模块中的一个或者一个以上的类,则两个模块之间存在关系。

换句话说:如果模块2内容的改变会影响模块1,则模块1对模块2具有一个物理依赖。 模块之间可以有直接依赖,也可以有间接依赖,或称为传递依赖。

实现变种

具有大量引入依赖(incoming dependencies)的模块,应该是稳定的。保证一个模块稳定的最好方法是使之成为Abstract Module。

对外具有大量依赖的模块不易测试。应该尽量避免过多的对外依赖,如果依赖是必须的,尽量依赖于Abstract Module。

任何时候如果你引入了一个新类,因而带来了模块之间新的依赖关系的话,那么你需要考虑你是否真的需要这个依赖,解耦这种依赖对于系统灵活性的重要性。Separate Abstractions可以基于接口来避免模块间的耦合。

创建测试模块用于单独的测试某一个模块,可以尽快的识别潜在的运行时问题。

一个类可以存在于多个模块中,但是不推荐这种做法。一个包可以分布在不同的moulde中,同样这是不推荐的。

管理和明确模块依赖的一个好的办法是用Levelize Build。基于Levelize Build,间接依赖无需包含在模块的编译时类路径,但是依赖需要包含在运行时类路径。

结果

相比于类结构,管理模块间的关系,更易于了解应用的整体结构 更易于隔离一个变化对一个模块集合的影响 能够检查和平衡系统的逻辑结构 为模块的复用提供支持和指导

实例

可以通过创建接口,以及规划类和接口在模块之间的物理分布,来反转模块间的依赖关系。

通过Separate Abstractions,也可以消除模块间的依赖关系。

总结

识别模块是设计模块化软件系统的第一步,接下来就是管理模块之间的关系,这些关系即为系统的结合点(joint),是一个系统灵活性的关键所在。

查看评论