1 Introduction

模块独立性: 每一个模块仅仅完成赋予的独立子功能, 并且与其他模块的联系尽可能的少并且简单.

定性的度量标准: 耦合度, 内聚度

2 Coupling[‘kʌplɪŋ]

2.1 Introduction

块间联系, 软件系统中各个模块相互联系紧密程度的一种度量, 联系越紧密, 耦合度越高, 模块的独立性越差.

耦合度的高低直接取决于:接口的复杂性, 调用的方式, 传递的信息.

2.2 Classify[‘klæsɪfaɪ]

无直接耦合: 没有任何关系的两个子模块

数据耦合: 模块之间存在调用关系, 传递的是简单的数据值, 值传递, 并非引用传递.

标记耦合: 模块之间传递的是数据结构, 使用引用传递该指针到另外一个模块, 要求引用模块了解另外一个模块关于本条数据的内部构造.

控制耦合: 调用模块传递控制变量(开关, 标志等)给被调用模块, 用于有选择的执行某一项功能.

公共耦合: 通过一个公共数据环境来对两个逻辑上耦合度很高的模块进行”纽带”, 从而降低模块之间的耦合度, “纽带”可以随时丢弃, 丢弃之后两个模块仍旧独立运行, 一些功能缺失.

内容耦合: 最高耦合, 模块之间互相使用内部数据, 通过非正常入口调用另一个模块内部.

3 Cohesion[kə(ʊ)’hiːʒ(ə)n]

3.1 Introduction

模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高.

3.2 Classify

偶然内聚: 指一个模块内的各处理元素之间没有任何联系。

逻辑内聚: 指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。

时间内聚: 把需要同时执行的动作组合在一起形成的模块为时间内聚模块。

通信内聚: 指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。

顺序内聚: 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。

功能内聚: 这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱

4 Example

准备充分的数据: 在开发django API 的时候, 尽可能保证各个 APP 独立性, 如果有不同app之间的数据沟通, 都尽可能的将所有准备数据放到 api/view 层进行处理,
确保每一次进入service都是准备好的完全数据值.

servcie: service内部尽可能的高内聚, 多个service共同实现一个尽可能内聚的功能, 如果不行, 那说明app还需要进一步拆分.

纽带: 使用纽带 APP或者 API 来连接多个 APP.