helper/storage 类 中的低内聚,真的错了吗?

Low cohesion in helper/storage classes, is that really wrong?

有一个像这样的 class,两个实例变量有两个 getter:

class A
{
   _fieldA;
   _fieldB;

  GetA()
  GetB()

  GetSpecialNumber(int a)
  {
      //calculation not requiring any fields
  }
}

class 将 class 化为完全缺乏凝聚力。但是,我相信在某些情况下需要这样的无状态对象,因此不应该应用内聚指标。或者是错误的 approach/thinking? 事实是,我从来没有读到过低内聚是好的,除了本文末尾提到的一些情况 material:http://www.aivosto.com/project/help/pm-oo-cohesion.html

对于这种情况,我会使用属性而不是字段,这有助于一些工具理解这是一个 DTO(这是正确的),因此他们不再抱怨凝聚力和代码质量。

struct X
{
    public int A { get; private set; }
    public int B { get; private set; }
}

如果 GetSpecialNumber(int a) 不使用任何 fields/properties,它可以是静态方法:

public static int GetSpecialNumber(int a)

如果要从其他地方使用它,我也会将其移至助手 class。

public static class SpecialNumberHelper
{
    public static int GetSpecialNumber(int a)
    {
        // calculation not requiring any fields
    }
}

不,低内聚不好,至少如果你的目标是面向对象的话。

现在,公平地说并警告您,这可能不是多数人的意见,但 DTO、Bean、Properties 或您所说的任何东西都设计得不好(正如链接的文章似乎暗示的那样)。同样,仅当您关心面向对象时。如果你不在乎那么多,那么你当然可以决定你想做什么。

显然存在一些微妙之处,例如给定的指标是否真的正确,或者外部力量(需求)是否将您拉向低耦合。然而,我们要避免低耦合的原因是我们希望在一个地方一起更改的东西以实现可维护性。低耦合的东西可能不会一起改变,因此 可维护性较低

低内聚有时会导致高耦合。例如,DTO(低内聚对象)在设计上导致高耦合。每当 DTO 中的 anything 发生变化时,all 需要检查使用该 DTO 的地方。也就是那些地方跟DTO是高度耦合的。