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

埃尔加利

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

每个方法使用每个变量的类具有最大的内聚性。通常,建议不要创建这样的最大内聚类...

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

提前谢谢了!!

Nikos M.

使我的评论成为答案。

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

可以看到,形状类具有最大的内聚性,考虑到对象及其方法的性质,这是完全正常的。计算实际利息时需要使用它们的变量。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么不可能注入泛型类?

来自分类Dev

为什么不可能获得指向基类的受保护方法的指针?

来自分类Dev

在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

来自分类Dev

为什么可以在TypeScript中将接口中可能的数字值转换为类实现中的不可能的数字值?

来自分类Dev

Nullable <int?>是不可能的,为什么不能呢?

来自分类Dev

为什么dcast不可能传递非聚合函数?

来自分类Dev

为什么在Haskell中不可能分割整数?

来自分类Dev

为什么在C中不可能重载?

来自分类Dev

为什么这在学说上是不可能的

来自分类Dev

Nullable <int?>是不可能的,为什么不能呢?

来自分类Dev

为什么本文中的这个问题是不可能的?

来自分类Dev

为什么不可能用焦点影响子元素?

来自分类Dev

为什么不建议使用描述演示的类名?

来自分类Dev

为什么在红宝石类中不建议使用常量?

来自分类Dev

ExtensionObjects 不可能的类名

来自分类Dev

聚类方法的建议

来自分类Dev

为什么不可能将自身缺少复制运算符的对象赋给矢量?

来自分类Dev

为什么我在scala比赛中遇到不可能的情况?

来自分类Dev

为什么不可能在EventBus中注册活动?

来自分类Dev

为什么在Maven中不可能包含相同依赖项的多个版本?

来自分类Dev

为什么当我为注册人命名时,asm有不可能的限制?

来自分类Dev

SHARE锁定记录的行为,为什么聚合功能不可能?

来自分类Dev

为什么不可能将`(()-> Void)`强制转换为`(()-> Void)`?

来自分类Dev

为什么在Python中不可能实现真正的不变性?

来自分类Dev

为什么不可能指定Scala varargs参数的默认值?

来自分类Dev

为什么不可能通过ddrescue压缩动态图像?

来自分类Dev

观看未使用的局部变量是不可能的吗?为什么?

来自分类Dev

如何在部分模板中设置@key?(或者为什么不可能?)

来自分类Dev

为什么不可能实现“无限”的一个时间片算法?

Related 相关文章

  1. 1

    为什么不可能注入泛型类?

  2. 2

    为什么不可能获得指向基类的受保护方法的指针?

  3. 3

    在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

  4. 4

    为什么可以在TypeScript中将接口中可能的数字值转换为类实现中的不可能的数字值?

  5. 5

    Nullable <int?>是不可能的,为什么不能呢?

  6. 6

    为什么dcast不可能传递非聚合函数?

  7. 7

    为什么在Haskell中不可能分割整数?

  8. 8

    为什么在C中不可能重载?

  9. 9

    为什么这在学说上是不可能的

  10. 10

    Nullable <int?>是不可能的,为什么不能呢?

  11. 11

    为什么本文中的这个问题是不可能的?

  12. 12

    为什么不可能用焦点影响子元素?

  13. 13

    为什么不建议使用描述演示的类名?

  14. 14

    为什么在红宝石类中不建议使用常量?

  15. 15

    ExtensionObjects 不可能的类名

  16. 16

    聚类方法的建议

  17. 17

    为什么不可能将自身缺少复制运算符的对象赋给矢量?

  18. 18

    为什么我在scala比赛中遇到不可能的情况?

  19. 19

    为什么不可能在EventBus中注册活动?

  20. 20

    为什么在Maven中不可能包含相同依赖项的多个版本?

  21. 21

    为什么当我为注册人命名时,asm有不可能的限制?

  22. 22

    SHARE锁定记录的行为,为什么聚合功能不可能?

  23. 23

    为什么不可能将`(()-> Void)`强制转换为`(()-> Void)`?

  24. 24

    为什么在Python中不可能实现真正的不变性?

  25. 25

    为什么不可能指定Scala varargs参数的默认值?

  26. 26

    为什么不可能通过ddrescue压缩动态图像?

  27. 27

    观看未使用的局部变量是不可能的吗?为什么?

  28. 28

    如何在部分模板中设置@key?(或者为什么不可能?)

  29. 29

    为什么不可能实现“无限”的一个时间片算法?

热门标签

归档