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

Why are maximally cohesive classes not advisable or possible to create?

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

A class in which each variable is used by each method is maximally cohesive. In general it is neither advisable nor possible to create such maximally cohesive classes ...

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

非常感谢!!

将我的评论变成答案..

  1. Maximal Cohesion,如书中所定义,通常意味着这些方法提供了重叠的功能,因此存在代码重复并且它们不是正交的。所以这是一个糟糕的设计,应该通过重构公共代码并尽可能使方法正交来避免,从而消除最大的内聚性。所以我的观点是,这就是为什么它不可取。
  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) {
     /* .. */
   }
}

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

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