sonar documentation将以下内容显示为LCOM4 = 1的重构代码。但是在我看来,它应该为2,因为getFullNamegetFullAddress之间没有内聚性。我想念什么?

public class Client {

  public String firstname;
  public String lastname;
  public Address address;

  public String getFullName() {
    return firstname + " " + lastname;
  }

  public String getFullAddress() {
    return address.getFullAddress();
  }

}

最佳答案

似乎您发现了文档问题!根据Freddy Mallet的说法,这不是LCOM4重构的一个很好的例子,并将得到解决:

http://sonar.15.n6.nabble.com/Question-about-LCOM4-td5009876.html

一般来说,有一些数据结构不太适合LCOM4算法,在进行重构决策时要记住这一点很重要。 POJO和Template Method模式的具体实现是我发现属于此类的两个示例。

在这种特定情况下,上面链接中的Mallet解释说,授予该特定bean LCOM4 = 1,因为getFullAddress被认为是bean访问器,并且LCOM4评分中不包含bean访问器。

09-27 11:18