添加对旧代码的更改

时间:2010-07-05 07:24:54

标签: java legacy

我们有一个由A,B和C类组成的遗留系统.A太可怕了。那么B.和C也是!! (这在公司内部得到承认,我们正试图在未来重新考虑它们)。

更可怕的是A和B扩展了C,他们真的不应该这样做,因为它们并不是真的相同。做编码的开发人员(称他为X)承认他是这样做的,所以A和B可以使用C的方法中的'SOME'!

现在客户想要更新遗留系统,并且更改要求我将相同的更改添加到A和B.我可以做的是将更改添加到C,以便A和B可以看到它。但是,如果我这样做,我将做与X相同的事情。

我的想法是写另一个D类,所以A和B可以有自己的D并得到改变。你怎么看?

提前致谢!

萨拉

3 个答案:

答案 0 :(得分:4)

有道理。 Josh Bloch还建议在有效的Java中使用组合而不是继承。当你在它时,检查你是否也无法移动其他几个共享例程。许多小步骤覆盖了很远的距离。

答案 1 :(得分:1)

如此笼统的问题很难给出一个明确的答案。

将常见(无状态)方法移动到辅助类中的想法可以是一个好的方法。类似地,将一个类的调用委托给另一个类的调用可以是减少已经膨胀的类的大小的好方法。

但是,很难说辅助类或委托是否是这种特殊情况下的最佳解决方案。例如,如果现有类的方法紧密耦合,则可能很难将它们分成不同的类。

也许最好的解决方案是提出现有类的重构,并摆脱不合适的(当你报告的)基类。

答案 2 :(得分:0)

萨拉,

如果不知道A,B和C之间的确切关系,很难给出具体的建议。如果他们需要完全相同的变化,我将假设A和B在某种程度上必须相似。因此,假设A和B相似但与C不同,您可能需要执行以下操作:

  1. 创建父类D,A和B都从中扩展。此父级包含A和B共享的功能(您计划更改)。
  2. 创建一个包含函数A,B和C共享的单独类,并让C和D具有它的实例或为C和D创建另一个父类E,它包含A,B的函数和C有共同之处。
  3. 同样,如果我的假设是错误的,我的建议可能无效。您是否有可能让我们更好地了解A,B和C如何相关?