2

我将在不久的将来修复 WinForms 应用程序 (.NET 2.0)。通过查看源代码,我发现大型代码文件(超过 2000 行)其中大多数是生成的对话框,其中包含大量代码隐藏。

有没有人可以分享我的建议?任何关于错误修复或重构 WinForms 应用程序的战争故事或最佳实践?

4

4 回答 4

3

简短版本:

购买 Michael Feathers 的书,有效地使用旧代码。

更长的版本:

维护(更改)此类应用程序的最大挑战是在不破坏某些内容的情况下进行。这意味着您需要了解应用程序的行为,最简单的方法是围绕它进行测试。正如您所指出的,起初这可能令人生畏,但并非不可能。它需要纪律和耐心。

您不必从单元测试开始。获得自动化框架(例如 NUnitForms 或 White)通常更容易首先将应用程序作为黑盒来驱动。在你需要改变的区域周围建立一套测试,让你有足够的信心在不破坏任何东西的情况下改变它。然后进入并开始针对单元可测试性进行重构。

如果它类似于我正在开发的应用程序,它主要涉及:

  • 删除未使用的代码(这会分散注意力)。
  • 删除公共静态方法调用并用接口替换它们(依赖注入是这里的关键技术)。
  • 将重复的代码提取到类中。
  • 隐藏适配器后面的文件处理、网络 IO 和用户界面代码(这些最初可能是非常薄的包装器,足以让您在测试时用存根替换它们)。
  • 寻找机会将行为提取到小班中。

有时重写代码部分比重构它们更容易,但这需要通过测试或参考规范(如果存在)来理解行为。

除了任何实用建议外,如果您是从事此工作的团队的一员,请确保您在一起工作。这将使工作更轻松、更愉快,并确保您今天所做的更改明天不会被不了解您正在做什么的人撤消。

我可以在这个话题上写一整天,但羽毛先生在这方面做得更好,而且我很饿。祝你好运!

于 2009-04-11T11:08:45.257 回答
2
  • 首先尝试理解代码及其背后的逻辑。
  • 一旦你理解了一些代码,试着为业务对象建模必要的类
  • 在您的新设计中使用某种层方法(3 层是经典的):接口层、业务层、数据访问层(或其他一些服务层)。
  • 耐心和记录一切!

我认为这是基本的东西。这里很多人一定有很多建议。祝你好运!

于 2009-04-11T08:32:00.360 回答
1

我会先写一些单元测试。如果代码相当密集,您将需要这些来保持理智。

它们会给你一些信心,让你在重构中相当积极。

于 2009-04-11T08:31:03.717 回答
1

从头到尾的几件事:

  • 将所有生成的代码放入部分类或区域(我使用区域
  • 将所有代码从操作移动到单独的区域或类作为函数
  • 为每个函数编写一个单元测试
  • 在此之后进行常见的重构模式,将相同/相似的功能组合到一个函数中
  • 确保不同的按钮不使用不同的功能来做同样的事情(尤其是在 VB.NET 中,这是很常见的设计,所以你可以在你的应用程序中发现)
  • 在可能的情况下正确使用发送者对象,而不是在控件事件处理程序中硬编码控件名称
  • 如果你看到任何代码都可以转换为一个不错的类,那就去做吧。从 WinForms 中删除所有非 GUI 代码。有时需要重构原始类以使其能够与 GUI 一起使用,编写单元测试并重构它们。(通常即使没有单元测试你也应该没问题)
于 2009-04-11T09:19:03.650 回答