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

问题描述 投票:0回答:1

[我正在学习罗伯特·C·马丁(Robert C. Martin)的《清洁代码》(Clean Code)(2009年)一书,但偶然发现了凝聚力的概念(第10章)。罗伯特语录:

最大程度地使用每种方法的每个变量的类 凝聚力。通常,既不建议也不可行 这样的最大内聚类 ...

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

非常感谢!

coding-style single-responsibility-principle design-principles cohesion
1个回答
0
投票

使我的评论成为答案。

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

正如人们所看到的,形状类具有最大的内聚性,考虑到对象的性质及其方法,这是完全正常的。计算实际兴趣时需要使用它们的变量。]​​>

希望示例和说明会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.