为什么不建议或不可能创建最大内聚类?



我正在学习Robert C. Martin的《Clean Code》(2009(一书,偶然发现了凝聚力的概念(第10章(。 罗伯特引用:

每个

方法在其中使用每个变量的类最大 粘性。一般来说,既不建议也不可能创建 这种最大的凝聚力类...

不幸的是,我没有在任何地方找到详细的解释。有没有人用真实的代码示例对此进行解释?

提前非常感谢!!

把我的评论变成一个答案..

  1. 书中定义的最大内聚通常意味着这些方法提供重叠的功能,因此存在代码重复并且它们不是正交的。因此,这是糟糕的设计,应该通过重构通用代码并使方法尽可能正交来避免,从而消除最大的内聚力。所以我的观点是,这就是为什么这是不可取的。
  2. 但是,可以创建最大内聚的类,在某些情况下这是完全正常的。

我能想到的一个简单而实际的例子是计算机辅助设计中表示几何形状的类。

例如:

class Circle{
float[2] center;
float radius;
draw() {
hardware.draw(center[0], center[1], radius);
}
print() {
print('Cicrle at '+center[0]+','+center[1]+' with radius '+radius);
}
scale(s) {
center[0] *= s;
center[1] *= s;
radius *= s;
}
intersectLine(line) {
/* compute intersection based on line and circle coordinates using both cnter and radius variables */
}
}

class Bezier{
float[4] controls;
draw() {
/* .. */
}
print() {
/* .. */
}
scale(s) {
/* .. */
}
intersectLine(line) {
/* .. */
}
}

正如人们所看到的,形状类是最大的内聚力,考虑到对象的性质及其方法,这是完全正常的。任何实际利息的计算都需要它们的变量。

希望示例和解释对您有所帮助。

最新更新