2

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

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

Getter 和 setter 将被复制。那么,这是一种不好的做法,我们应该避免这种做法吗?或者这不应该被代码分析器(例如PMB)视为重复代码?

我曾考虑过“策略模式”,但我认为这可能太多了,仅适用于 getter 和 setter ......

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

4

4 回答 4

2

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

现在让我们假设它们确实是需要的。当然可以。PMD 的复制粘贴检测器可让您在将其计为重复之前设置最小行数。由于 getter/setter 各只有三行(或两者均为 6 行),因此您可以将阈值设置为略高于那里。

于 2012-05-26T02:44:43.377 回答
1

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

于 2012-05-25T14:23:21.863 回答
1

复制代码并不总是一个错误的想法,在某些情况下不可避免地要进行一些克隆。现在也确实生成了 setter 和 getter,但也生成了 for 和 while 循环,并且这些代码不应自动排除,因为它们是手动维护的。不加考虑地积极消除代码重复不是一个好主意。基本上并不是所有的重复都是坏的,而且它并不总是能够消除它们。得到回报的是所谓的克隆管理,即跟踪现有的重复并消除真正引起麻烦的重复。为此,您需要一个复杂的工具,例如 FrontEndART 的QualityGate,它包含一个CloneManager模块。它不仅列出了重复,还通过版本跟踪它们的生活,并让您知道哪些是您应该仔细查看的重复。您可以在QualityGate的在线演示版中查看此工具。

于 2014-08-14T13:04:53.677 回答
0

Setter 和 getter 是自动生成的代码,所以它们绝不是代码重复(有人手动编写它们)?

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

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

于 2012-05-25T14:30:31.970 回答