我目前正在一段代码在哪里逻辑和数据存取存在GUI课程。显然,我想提高在这种情况。

目前的结构基本上是:

  • 大泥球

最终的目标是实现一个DDD状结构:

  • DAL
  • 领域模型
  • 服务层
  • 演示模型
  • GUI

所以,你会怎么袭击什么问题?

有帮助吗?

解决方案

从来没有尝试"大爆炸".它几乎总是在打击你的脸,因为它是一个高风险时,绝望的措施时,其他一切都已失败。

分而治之:这个工作的好...如果你的世界只有两个方面。在真实的软件,你要征服所以许多方面在同一时间,可以很少得到生活在一个黑色的-白色的幻想。

我想我已经使用类似"扼杀"对于大多数的职业:逐渐变坏旧的代码变成闪亮的新的编码。这里是我的食谱:

开始的某处,它不会真正的问题在哪里。写几个单元的测试,看看怎样的代码,真正的行为。找出如何通常它做什么你觉得它不会以及如何通常不是这样的。用你的IDE重构的代码这样你可以对它进行测试。

之后的第一天,作出猜测你是否已经开始在正确的地方采取这个怪物分开。如果是这样,走吧如果不是,找到一个新地方开始。

优点这个战略:它的工作原理在小步骤,这样的风险可保持在检查和如果有什么打破,如果必须在代码已经工作的最后一周。

缺点:它需要一个整体很多时间和你会感到沮丧,因为经常的进展将只是似乎很缓慢,直到的"结"持久性有机污染物和突然,一切都开始落入的地方,如果通过魔术。

其他提示

我从未听说过的术语'扼杀申请'-我喜欢它。在可能的,这将始终是一个很好的做法,它当然可最大限度减少风险是相当务实、削弱大大厦中的一块一块的。

在那里,不在我的经验是合理的重大需要改变的时候了-改变,将需要一些重构(或多hacking)。在这种情况下,我经常发现变化,我需要做的是正确的核心,大泥球和没有选择,而是越来越脏-甚至什么应该是标准维护或未成年人增强的变化只是可怕的一个主要重构是最好的选择。

对于那些情况下,我去分而治-第一个目标,我总目标是可测性,一旦所有剩下的就是这样要容易得多。事实上,这往往是一个主要的驱动,我们重构远离大泥球–这种代码常常是非常接近联合国进行测试,希望有例UI输入和输出,但有时甚至是失踪。

所以,当遇到的码在那里一切都集中到UI我通常开始由保理离散单元的功能进入课程和方法,然后推动这些零部件的编码下进入一个领域或业务层。这样做点点大大降低了打破东西并使其更易于销点所在破码是当事情出问题。

运行任何测试情况下,有可利用的变化和确定你还会的某种基准。

如果你写出好的单元的测试,你去,你可以开始减少的规模的问题,我们发现,它很快成为实际采取的扼杀者的方法-与体面的单元的测试,或至少是合适的框架以允许写的单元的测试,它变得更加实用的逐步替换零部件的功能。

我偶然发现了"天皇的方法",这似乎有希望的攻击这种性质的问题.

http://mikadomethod.wordpress.com/

还有一个谈天皇的方法从Øredev2010年。

http://oredev.org/2010/sessions/large-scale-refactorings-using-the-mikado-method

大爆炸/大重新设计/重写SW...或任何其他名字不会为生活而工作SW。原因是:

  • 你仍然需要支持现有软件与(可能)同一资源。

  • 你可能没有要求重写。你的旧代码拥有所有要求的嵌入内。没有你的工程师知道所有的SW域和所有要求。

  • 重写将需要时间。在这段时间结束时,你会发现现有的软件已经改变到支持的事情,需要在这段时间。你的新软件实际上的分裂,从原来的合并将是必要的(它也将需要时间)。

取决于你是否必须始终是一个工作状态,所以你能修正错误和部署时neccassary,然后分裂和征服,将是一个良好的解决方案。如果你可以维持的古老的代码,同时工作的一个新的一项(和有disciplin应用错误的修正,以代码基地)重新写,可以更好的解决方案。

如果由重构,您意味着改善的代码没有修改的功能,我会开始通过创建一个自动回归测试的基线。有很多的工具以帮助这一点。我用 TestComlete 虽然有很好的廉价替代品。

已经建立了一个回归测试的基线,就个人而言我会再去与分而治,因为它在我的经验这是最有可能取得成功。一旦你有一个测试基准,它事项不用哪种方法选择。

对我来说,这取决于局势。

如果这是一个非常小项目,我会被诱惑,刚刚重写,它从头开始...但是你们不常有的奢侈品。

如果做不到这一点,我去为削弱这一块一块的。我会写单元的测试,以验证现有的功能和缓慢地使用TDD转变为一个优雅的和精心设计的系统。这取决于如何长这个过程是要把它将可能开始看起来像StranglerApplication你上面提到的。

世界是很危险的,因为你没有简单的方法的核实,更新的系统不一样的事情如旧。

分而治之是风险较低于世界...但如果它是一个足够大的系统,它可能被仅仅是为有问题的世界.

是一个总的改写一个选择吗?以我的经验,从零开始重写往往可以更有效的努力来清理现有的混乱。你冷仍然保持的部分的现有编码,但是在一个新的环境。和同样的图形用户界面和数据库如果你有一个。改写从头开始,并采取与你有什么你可以使用。

开始一个新的清洁的建筑和运动的老件的代码进入这个新的结构一块一块的,并重构,以满足新的拱门将是一个好的选择。我想一下而上的方法时动的职能将是好的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top