我有一个维护相当复杂的遗留类:
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方法将实现委托给适当的静态类(与命令非常相似)。
?
提前谢谢!
答案 0 :(得分:3)
SRP - 单一责任原则和 DRY - 不要重复自己
答案 1 :(得分:1)
我首先找到重复的位并将它们提取到辅助函数中。一旦你以这种方式缩小代码库,你可以考虑其他的重构方法,代码将更容易包围。
答案 2 :(得分:1)
请参阅SD CloneDR,了解可以告诉您每个方法的共同代码块的工具,包括可能的参数化。
答案 3 :(得分:0)
干 - 不要重复自己。
我经常做的第一件事就是删除(全部)重复。即使是一条线也是重复的。
这将规范化代码,并为您提供一系列增强功能,例如对代码进行泛化。
答案 4 :(得分:0)
首先绘制当前功能并制作UML类图。这样你就可以有效地实现DRY。
将设计更改为有效且干燥,同时仍保持系统界面尽可能相同。
然后你为新系统编写单元测试,最好为旧系统编写它们,但是因为你可能要更改方法名称和参数,所以单元测试可能无法工作两个系统。
询问您的经理对单元测试的反馈,您是否正确理解了该功能?不要实现任何新功能,这将导致使用代码的现有系统出现问题,如果您使新设计正确添加新功能
实施已批准的系统。
使用默认值作为参数来减少重载:SelectUser(int userId = 0)
可以使用SelectUser();
调用