dr.*_*vil 4 .net refactoring design-patterns coupling
我正在尝试重构一个紧密耦合的大型应用程序,并试图使其更易于维护和灵活.
我有很多单元测试,所以我希望一步一步地进行重构.
我应该考虑实施/应用哪些设计和重构模式来完成这项任务?
我能想到一些:
也可以随意分享您自己的经验和这种重构工作的最佳实践.
UPDATE
由于这个问题中解释的原因,我正在进行这种重构.基本上我不能在不提取几个接口的情况下实现插件系统,并且这些接口是高度耦合的,这需要将40多个DLL中的应用程序分开,以便在没有循环引用问题的情况下进行编译.
严肃地说,重构不是一个可以掉以轻心的事,特别是在紧耦合系统中.它在执行之前通常看起来是一项有价值的任务,但根据我的经验,它很快就会成为负担,因为它通常更有可能引入新的错误而不是解决任何现有的问题.
在开始进行重大重构之前,您应该考虑收益是什么以及有哪些替代方案(例如从头开始创建新产品,仅重构需要它的部分,等等).在开始之前,您当然应该很好地理解架构,角色和职责,以及预期和现有的行为,以确保您知道何时破坏了某些内容.
此外,在重构之后绘制一个如何设计的设计以及如何映射到当前实现以便您可以保持重点是有益的.您还应该尽可能多地进行回归测试.
当设计显然需要重构时,完美主义者可能会感到沮丧,但有时必须考虑变更的成本/收益并承认战斗.如果你必须做出改变,请小心行事,不要试图做太多.
这是一个很大的问题,人们可以写一整本书来回答它.幸运的是,有人已经拥有.抓住Michael Feathers的"有效使用遗留代码"的副本.这几乎是一本专门回答你问题的书.
这本书也是一本非常好的书.我绝对会把代码完成,设计模式和实用程序员放在每个开发人员库中的书籍清单上.
感谢所有答案,在尝试了多种不同的方法之后,我发现最好的办法就是为所有东西创建接口。这使我能够自由地更改设计,并且我只破坏了一天的构建(一天是因为项目很大,我需要修复如此多的引用和单元测试+一些重构)。
经过一天的提取和修复所有界面后,我可以创建单独的解决方案并自由地进行设计。
基本上,我认为第一步应该是将所有内容移至接口,然后尝试摆脱内部依赖关系。