1

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

class A
{
   _fieldA;
   _fieldB;

  GetA()
  GetB()

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

该类将被归类为完全缺乏凝聚力。但是,我相信在某些情况下需要这样的无状态对象,因此不应该应用内聚度量。或者这是一个错误的方法/想法?事实是,除了本材料末尾提到的一些案例外,我从未读过关于低内聚力的文章:http ://www.aivosto.com/project/help/pm-oo-cohesion.html

4

2 回答 2

2

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

现在,公平起见并警告您,这可能不是大多数人的意见,但 DTO、Bean、属性或您称之为的任何东西都没有经过精心设计(正如链接的文章所暗示的那样)。同样,仅当您关心面向对象时。如果你不在乎那么多,那么你当然可以决定你想做什么。

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

低内聚有时会导致高耦合。例如,DTO(低内聚对象)通过设计导致高耦合。每次DTO 中的任何内容发生更改时,都需要检查使用该 DTO 的所有地方。也就是说,这些地方与 DTO 高度耦合。

于 2018-02-05T10:27:13.320 回答
1

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

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

如果GetSpecialNumber(int a)不使用任何字段/属性,它可以是静态方法:

public static int GetSpecialNumber(int a)

如果它将在其他地方使用,我也会将其移至辅助类。

public static class SpecialNumberHelper
{
    public static int GetSpecialNumber(int a)
    {
        // calculation not requiring any fields
    }
}
于 2018-02-05T08:38:23.507 回答