1

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

每个方法都使用每个变量的类具有最大的内聚性。一般来说,创建这种具有最大凝聚力的类既不可取,也不可能……

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

提前谢谢了!!

4

1 回答 1

1

将我的评论变成答案..

  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) {
     /* .. */
   }
}

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

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

于 2020-06-08T12:29:02.310 回答