【问题标题】:Optimising and Redesigning an existing Application优化和重新设计现有应用程序
【发布时间】:2009-11-08 02:50:18
【问题描述】:

这似乎是许多程序员论坛上流行的抱怨,所以如果这个问题已经出现在这里,我不会感到惊讶。抱歉,如果已经回答,但我已经搜索并找不到与 Java/OO 相关的问题。

我有一个几个月前编写的有点复杂的应用程序。它工作得很好,但速度很慢,而且代码非常难看。类被拆分没有逻辑原因,一半的 UI 在逻辑代码中,而且构建起来真的很令人沮丧。我想按照正确的设计标准重新设计和重新开发这个程序,但我不想完全破坏它。没有设计文档,没有文档,只有代码(没有格式)和构建的应用程序。

获取现有 Java 项目的最佳方式是什么,以最令人讨厌的方式编写并以最佳方式重新开发它?是否有任何好的工具可以帮助我找到速度瓶颈或在 NetBeans 中进行广泛的测试?任何对测试新手的帮助将不胜感激。

编辑:你说得对,我们并不真正了解这个程序。它做我们想做的事,但它也做其他我们不知道的事情,比如创建奇怪的图形和出现在 UI 上的奇怪数字。我们想要重新设计的主要原因是我们可以真正了解发生了什么,但正如我所说的那样,代码太混乱了,你会认为它是由一个不想让我们发现他的天才编写的秘密。

【问题讨论】:

  • 你让我在“它运作良好” - 不要碰它:-)
  • +1 到 ChssPly。 “如果它没有坏,就不要修理它”。如果您有关于“不起作用”的代码,也许您应该先解决这个问题?
  • “几个月前”?奢华!
  • “最烦人的方式”?奢华!

标签: java design-patterns refactoring


【解决方案1】:

“无格式”

Netbeans 在“源”菜单中有一个自动格式化程序选项。那将是一个好的开始。

“没有设计文档,没有文档,只有代码”

当您确定各部分的作用时,将其记录下来对您(以及您的继任者)很有帮助。这样,您将开始拥有可以参考的文档。

在重构之前使用 JUnit 开始将一些单元测试添加到部分中也不会受到伤害。

“我想按照正确的设计标准重新设计和重新开发这个程序,但我不想完全破坏它。”

从小处着手。找出一些可以设计得更好的简单事物,然后首先专注于它们。在 Netbeans 中使用 Refactor 功能将对此有很大帮助。专注于确保你重构的所有东西仍然可以正常工作(这就是为什么从小处着手有帮助)。你清理的小东西越多,大的东西就越容易清理。

此外,请确保您正在重构的内容实际上是一种改进...

【讨论】:

  • “从小处着手”——尽可能多地咀嚼效果不佳总比完全没效果好,而且,让代码变得漂亮很有趣(我几乎无法忍受我看到的所有代码/设计 :-),功能特性(以及满足它们所需的资源)才是最重要的。
  • +1 用于单元测试,但我也会将其扩展到系统级(黑盒)测试,尤其是在应用程序应该做什么并不清楚的情况下。
【解决方案2】:

我会附和 C. Ross 的 cmets 并为我过去处理过的常见“坏代码”场景添加这些策略:

  • 代码重复:唯一比坏代码更糟糕的是同一个坏代码的多个副本。通过快速阅读(了解它的味道)熟悉整个代码库并识别剪切和粘贴代码的实例。将它们重构为单个实现并删除重复项。可能就是这样 - 或者您可以继续完善该代码的单个副本。

  • 不要急于修复它:只清理您积极需要维护和/或理解的代码。这是如果它没有损坏就不要修复它的变体我喜欢调用如果你不需要改变它就不要修复它。但是,每当您需要触摸一段代码时,都需要多花 10 分钟来清理它。也许这只是添加格式化、添加一些内联 cmets、重命名变量以使其有意义等。您需要更新的任何代码将来很可能会再次修改,现在您已经完成了一切。您无需实际更改的代码可以保持丑陋而不会造成任何损害。

祝你好运:)

【讨论】:

    【解决方案3】:

    如前所述,丑陋的代码可以由猴子用适当的 IDE 清理,所以我不会只凭这个论点去找你的经理。

    务实,我会选择:

    1. 使用一些工具(分析器、代码复制工具)来找出几个痛点
    2. 针对每一点,提出一个如何解决它的作战计划(包括简短的规范、设计、可能是代码示例、测试用例......)。
    3. 去找你的经理,让他决定先解决哪个问题

    危险在于做得太多并试图清理一切。根据应用程序的大小,清理它可能需要数年时间(因为您不会全职这样做),所以请耐心等待。

    当然,当您重新访问部分代码时,只需使用您最喜欢的 IDE 清理它即可。

    【讨论】:

      【解决方案4】:

      确实唯一的答案是出汗公平,但有些事情可以提供帮助:

      重构愉快!

      【讨论】:

        【解决方案5】:

        你所拥有的本质上是一个原型。告诉你的经理它就是这样,应该重写它以达到生产质量。

        【讨论】:

          【解决方案6】:

          JProfiler 非常棒,我昨天才使用它,实际上是为了在我的一些 Java 代码中发现性能瓶颈。

          如果您可以进行一些自动化测试,您将能够更好地开始重构,因为您可以确保它仍然按预期运行。具体来说,我认为您应该专注于系统的非常高级别的测试,如果它是一个网络应用程序,请查看selenium 和/或其他网络应用程序测试框架。

          除此之外,准备好走上许多死胡同,尽可能避免一次做出太多改变。你越能将大型应用程序分解成更小的块,一次处理一个,你就越有可能成功。另外,请准备好接受其中一些很可能永远保持糟糕状态,如果它没有像他们说的那样坏,就不要修复它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多