软件设计的关键品质是内聚和耦合。这不是什么新奇的“面向对象”概念;自从20世纪70年代出现结构化设计开始,开发者对这一概念已经谈论了许多年。我们的目标是通过设计使系统的组件具备下列品质:
1. 高内聚
内聚是一个测量指标,说明相关的功能如何聚集在一起,模块内的各部分作为一个整体工作得如何。内聚性是将模块粘成一个整体的胶水。
弱内聚的模块是不良分解的信号。每个模块都必须具有清晰定义的角色,而不只是一堆不相关的功能。
2. 低耦合
耦合是模块之间独立性的测量指标——它们之间进出“电线”的数量。在最简单的设计中,模块几乎没有什么耦合,所以彼此间的依赖关系较少。显然,模块不能够完全解耦,否则它们将根本不能够一起工作!
模块之间的联系有多种方式,有的是直接的,有的是间接的。模块可以调用其它模块中的函数,或被其它模块所调用。它可能使用其它模块提供的Web服务或设施,可能使用其它模块的数据类型,或提供某些数据让其它模块使用(可能是变量或文件)。
好的软件设计会限制通信的线路,只提供哪些绝对需要的。这种通信线路是确定架构的一部分因素。