重构。用大方法降低大类代码复杂性的方法

时间:2010-06-08 04:41:31

标签: c# refactoring

我有一个维护相当复杂的遗留类:

class OldClass {
  method1(arg1, arg2) {
      ... 200 lines of code ... 
  }

  method2(arg1) {
      ... 200 lines of code ... 
  }

  ...

  method20(arg1, arg2, arg3) {
      ... 200 lines of code ... 
  }    
}

这些方法庞大,非结构化和重复性(开发人员喜欢复制/粘贴aprroach)。我想将每个方法分成3-5个小函数,使用一个pulic方法和几个帮助器。

你会建议什么?我想到了几个想法:

  • 为每个方法添加几个私有帮助器方法,并将它们连接到#region(直接重构)

  • 使用命令模式(每个OldClass方法在一个单独的文件中使用一个命令类)。

  • 使用一种公共方法和方法为每个方法创建辅助静态类。几个私人助手方法。 OldClass方法将实现委托给适当的静态类(与命令非常相似)。

提前谢谢!

5 个答案:

答案 0 :(得分:3)

SRP - 单一责任原则和 DRY - 不要重复自己

答案 1 :(得分:1)

我首先找到重复的位并将它们提取到辅助函数中。一旦你以这种方式缩小代码库,你可以考虑其他的重构方法,代码将更容易包围。

答案 2 :(得分:1)

请参阅SD CloneDR,了解可以告诉您每个方法的共同代码块的工具,包括可能的参数化。

答案 3 :(得分:0)

干 - 不要重复自己。

我经常做的第一件事就是删除(全部)重复。即使是一条线也是重复的。

这将规范化代码,并为您提供一系列增强功能,例如对代码进行泛化。

答案 4 :(得分:0)

  1. 首先绘制当前功能并制作UML类图。这样你就可以有效地实现DRY。

  2. 将设计更改为有效且干燥,同时仍保持系统界面尽可能相同。

  3. 然后你为新系统编写单元测试,最好为旧系统编写它们,但是因为你可能要更改方法名称和参数,所以单元测试可能无法工作两个系统。

  4. 询问您的经理对单元测试的反馈,您是否正确理解了该功能?不要实现任何新功能,这将导致使用代码的现有系统出现问题,如果您使新设计正确添加新功能

  5. 实施已批准的系统。

  6. 使用默认值作为参数来减少重载:SelectUser(int userId = 0)可以使用SelectUser();调用