耦合

有 A 和 B 两个 element。当修改了 A 的时候,B 必须被修改,那么两者就耦合了。

在耦合的定义里没有 element 之间的包含关系。耦合是两两之间的,不是父子之间的

耦合差不多就是静态类型的引用关系,那种可以被编译器报错的“连接约束”

耦合和业务上的变化倾向没有关系。不是说两个东西在业务上经常同时被修改,就是耦合了。要看这两个东西之间是不是有类似静态类型引用这样的,不改就会导致编译失败的“连接约束”。

内聚

内聚的定义是 element 之间有包含关系。

打开网易新闻 查看更多图片

element 甲包含了 a,b,c e,f

如果修改 a 会因为耦合,同时修改 b 和 c。那么 element 甲的内聚就是 3/5
如果修改 a 会因为耦合,同时修改 b,c,e,f。那么 element 甲的内聚就是 5/5
假设 a,b,c 是耦合的,e,f 是耦合的。如何提高甲的内聚呢?就是把甲缩小一些,只包含 a,b,c

也就是内聚是

具有一堆子 elements 的父 element 具有的一种属性
所包含的子 elements 之间耦合占比越高,则内聚越高

通过移动包含的边界,达成内聚

如果父 element 是文件夹,则要移动文件夹内的文件,使得文件之间都是耦合的。如果两个文件都在一个文件夹内,但是彼此之间没有耦合关系,则是不好的。

如果父 element 是文件,则要移动文件内的函数和类,使得这些函数和类之间都是耦合的。如果两个函数都在一个文件内,但是彼此之间没有耦合关系,则是不好的。

如果父 element 是类,则要移动类里面的方法,使得这些方法之间都是耦合的。如果两个方法都在一个类之内,但是彼此之间没有耦合关系,则是不好的。

耦合不是坏事情,只是一种客观存在用来指导发现“父 element”的边界