关于使用Weld / CDI的LCOM4的问题?

时间:2011-06-27 09:46:47

标签: java oop metric

我是Sonar和Weld / CDI的新手。我希望您的帮助能够通过Weld / CDI进一步提供有关LCOM4分析结果的建议。首先,我创建一个简单的java类,如下所示: -

-------------源---------------

interface MyInterface1 {
   String getName();
   void setName(String name);
}

interface MyInterface2 extends MyInterface1 {
   String getPhone();
   void setPhone();
}

public interface MyPublishedInterface extend MyInterface1, MyInterface2 {
   //There is no any definition, it just a collected capabilities 
   //which will be published to other package. Some capabilities 
   //may be hidden and use internally.
}

abstract class MyBean1 implements MyInterface1 {
   private String name;
   @Override
   public String getName() {
      return this.name;
   }
   @Override
   public void setName(String theName) {
      this.name = theName;
   }
}

abstract class MyBean2 extends MyBean1 implements MyInterface2 {
   private String phone;
   @Override
   public String getPhone() {
      return this.phone;
   }
   @Override
   public void setPhone(String thePhone) {
      this.phone= thePhone;
   }
}

public class MyPublishedBean extends MyBean2 implements MyPublishedInterface {
   //There is no any coding, it just a collected capabilities 
   //which will be published to other package. Some capabilities
   //may be hidden and use internally.
}

@Named
@RequestScope
public class MyBackingBean {
   @Inject
   private MyPublishedInterface myPublishedInterface;

   //-----the business method, setter and getter here.
}

-------------源---------------

在我使用Sonar进行分析后,它报告MyPublishedBean的LCOM4> 1

  
      
  1. getPhone()Ljava /郎/字符串;
  2.   
  3. 的setName(Ljava /郎/字符串;)V
  4.   
  5. setPhone(Ljava /郎/字符串;)V
  6.   
  7. 的getName()Ljava /郎/字符串;
  8.   

以前我曾经将所有方法都标记为“最终”方法,没有任何关于LCOM4的提及。无论如何,系统向我显示了关于Unproxyable的异常,因为我的类包含final方法。我已经删除了“最终”,我遇到了LCOM4问题。

我不确定我是否对Sonar,Weld / CDI,类/界面设计或所有这些都感到困惑。你能帮忙进一步提出建议吗?

1 个答案:

答案 0 :(得分:4)

声纳文档很好地解释了LCOM4。根据您在此处给出的示例,您看到的结果完全正确。

这些界面看起来就像是没有逻辑的数据持有者。只有getter和setter属性的bean才能完全期望LCOM值等于bean中的属性数。 LCOM4是一个衡量一个类中逻辑的内聚力的指标。纯数据bean的逻辑只是数据在某种程度上彼此相关。因此,在这种情况下,LCOM4是一个不正确且误导性的指标。

LCOM4也应完全独立于您的方法是否为最终方法。

请注意LCOM4> 1表示可疑类。这并不意味着该类是错误的,不应该用于将类标记为坏。一旦发现可疑类是正常的,最好以某种方式从度量标准中删除该类(以避免构建一长串警告,您应该忽略这些警告)。