耦合
有 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 之间耦合占比越高,则内聚越高