避免在POJO类中重复代码

时间:2012-05-25 14:20:07

标签: java sonarqube pmd code-duplication

假设我们有3个类:A,B和C.每个类在参数中都有其他类。像这样: 编辑:

 +-----+  +-----+  +-----+
 |  A  |  |  B  |  |  C  |
 -------  -------  -------
 | X x |  | X x |  | Z z |
 | Z z |  | Y Y |  | Y y |
 -------  -------  -------

吸毒者和二传手将被复制。那么,这是一种不好的做法,我们应该避免这种情况吗?或者这不应该被代码分析器(例如PMB)作为重复代码?

我已经考虑过“战略模式”,但我认为这可能太多了,只是对于吸气者和制定者......

编辑:我的第一个问题可能不太清楚。问题是我们是否有两个类(没有链接)具有共同的属性和完全相同的getter / setter。声纳或PMD应该将这些方法视为重复代码吗?如果没有,它会被修复吗?

4 个答案:

答案 0 :(得分:2)

如前所述,首先考虑一下您是否真的需要复制。也许他们应该在一个共同的对象中传递。也许他们不需要。

现在让我们假设他们真的需要。当然可能是这种情况。 PMD的复制粘贴检测器允许您在计算重复之前设置最小行数。由于getter / setter每个只有三行(或两者都是6行),你可以在那里设置阈值。

答案 1 :(得分:1)

这是一个循环参考,通常是不好的做法。你可以重新设计不这样做吗?

答案 2 :(得分:1)

复制代码并不总是错误的想法,在某些情况下,制作一些克隆是不可避免的。现在生成setter和getter也是如此,但是也生成for和while循环,并且这些代码不应该被自动排除,因为它们是手动维护的。在没有任何考虑的情况下积极地消除代码重复并不是一个好主意。基本上并非所有重复都是坏的,并不总是能够弥补它们的消除。值得称赞的是所谓的克隆管理,即跟踪现有的重复并消除真正引起麻烦的重复。为此,您需要一个复杂的工具,例如FrontEndART的QualityGate,其中包含CloneManager模块。它不仅列出了重复内容,还通过版本跟踪它们的生命,并让您知道您应该仔细查看哪些重复内容。您可以在online demo version of QualityGate上查看此工具。

答案 3 :(得分:0)

Setter和getter是自动生成的代码,因此它们永远不会代码重复(是某人,谁手动编写它们)?

您应该考虑的唯一问题是,您是否有数据重复?并且没有办法对你的例子说,因为“A”和“C”类中的字段“b”可以有其他含义。

就像'客户'和'建筑'中的字段'地址'。这意味着别的东西。