Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加对旧代码的更改_Java_Legacy - Fatal编程技术网

Java 添加对旧代码的更改

Java 添加对旧代码的更改,java,legacy,Java,Legacy,我们有一个由a类、B类和C类组成的遗留系统。a类是可怕的、庞大的。B和C也是如此!!(这是公司内部承认的,我们正试图在未来对其进行重新保理) 更可怕的是A和B扩展了C,它们真的不应该扩展,因为它们不是一回事。一位编写代码的开发人员(称他为X)承认,他这样做是为了让A和B可以使用C的“一些”方法 现在,一个客户端想要更新遗留系统,而更改要求我将相同的更改添加到a和B。我可以做的是将更改添加到C,以便a和B可以看到它。但是如果我这样做,我会做和X一样的事情 我想写的是另一个D类,这样A和B就可以有自

我们有一个由a类、B类和C类组成的遗留系统。a类是可怕的、庞大的。B和C也是如此!!(这是公司内部承认的,我们正试图在未来对其进行重新保理)

更可怕的是A和B扩展了C,它们真的不应该扩展,因为它们不是一回事。一位编写代码的开发人员(称他为X)承认,他这样做是为了让A和B可以使用C的“一些”方法

现在,一个客户端想要更新遗留系统,而更改要求我将相同的更改添加到a和B。我可以做的是将更改添加到C,以便a和B可以看到它。但是如果我这样做,我会做和X一样的事情

我想写的是另一个D类,这样A和B就可以有自己的D,并得到改变。你觉得怎么样

提前谢谢


莎拉说得通。Josh Bloch还建议在有效的Java中使用组合而不是继承。当你们在做的时候,检查一下你们是否也不能移动一些其他的共享例程。许多小步走了很远。

用如此笼统的语言表达的问题很难给出明确的答案

将公共(无状态)方法移动到helper类中是一个好主意。类似地,将对一个类的调用委托给对另一个类的调用可以是一种减少已膨胀的类的大小的好方法

然而,很难说在这种特殊情况下,助手类或委托是否是最好的解决方案。例如,如果现有类上的方法紧密耦合,则可能很难将它们划分为单独的类

也许最好的解决方案是对现有类进行重构,并去掉不合适的基类(正如您所报告的那样)。

Sarah

如果不知道A、B和C之间的确切关系,就很难给出具体的建议。如果A和B需要完全相同的更改,我将假设它们在某些方面一定是相似的。因此,假设A和B与C相似但不同,您可能需要执行以下操作:

  • 创建父类D,a和B都从其扩展。此父项包含A和B共享的功能(您计划更改)
  • 创建一个单独的类,其中包含函数a、B和C共享,并使C和D都有一个实例,或者为C和D创建另一个父类E,该父类包含a、B和C共有的函数

  • 同样,如果我的假设是错误的,我的建议可能是无效的。你能不能让我们更好地了解a、B和C之间的关系?

    是的,我想做的就是提出重构。然而,现实情况是,我们必须首先推动变革(@sarahTheButterFly)注意这种态度:确保你所做的每一次更改都使代码比开始之前更干净。不要在代码更干净之前发布代码。代码不必一尘不染,只需更简单。记住这句话:“如果你发现自己陷入了困境,首先要做的就是停止挖掘。”@Peter是的,我理解你的意思。我完全同意Stephen C关于提出重构过程的建议。但是,我不是决策者。我希望我是!我确实尝试在开始之前让代码保持干净。这就是为什么我在这里问这个问题。如果你能在之前添加一些单元测试,那会更好,以便更好我对你的重构很有信心…谢谢Jake的回复。是的,我认为a和B有可能有一个父类D。但是这两个类都需要重新分解并分解为许多小类。我希望我能清楚地概述a、B、C是什么样的以及它们之间的关系,但我不能,因为它们太混乱和复杂了复杂。我们正在考虑重新撰写,但我确实记得Joel关于Netscape故事的文章……我认为这篇文章应该关闭,这样我就不会让更多的人感到困惑。没问题,Sarah。我认为我们的处境与你现在所处的处境相似。你只需要对你所得到的东西进行适当的处理,希望你能做到在这个过程中,我们将系统做得更好一些。