我们已经听到的 过早的优化, 但你怎么想过早重构?是否有任何这样的事情在你的意见吗?这里就是我得到的。

首先,阅读马丁*福勒的开创性工作 "重构" 毫不夸张地说,改变了我的生活在关于方案编制。

有一件事情我已经注意到的,但是如果我开始重构一类或框架的太快了,我有时发现自己编到一个角落里所以要发言。现在,我怀疑该问题是不是真重构本身,但也许过早/穷人设计的决定/假设。

你有什么想法、见解和/或意见这一问题?你有任何的建议或同反模式有关这个问题?

编辑:

从读取你的答案,并反映在这个问题上,我认为我已经实现,我的问题,在这种情况下确实是一个问题的"过早的设计"和不必要的"过早重构".我是有罪的假设设计以及重构在这方面对早期的编码的过程。一点点耐心我的一部分,以保持一定程度的设计和不可知论重点放在重构向清洁码会让我从标题下的这些设计兔径。

有帮助吗?

解决方案

我实际上认为相反。

越早开始考虑您的设计是否需要重构,就越好。不断重构,所以这绝不是一个大问题。

我还发现,我在早期重构的越多,我就越能更清晰地编写代码。我倾向于创建更少的大型方法,并且问题更少。

但是,如果你发现自己“重构”了你自己陷入困境,我希望这更多的是缺乏初始设计或缺乏对课程使用范围的规划。在开始编写代码之前,尝试写出如何使用类或框架 - 它可以帮助您避免该问题。这也是我认为测试驱动设计的一个优点 - 它可以帮助你强迫自己在编写之前使用你的对象。

请记住,技术上的重构应该永远不会让你陷入困境 - 这是关于重新修改内部结构而不改变类的使用方式。如果你通过重构来捕获自己,那就意味着你的初始设计存在缺陷。

您可能会发现,随着时间的推移,这个问题会变得越来越好。您的类和框架设计可能会更灵活。

其他提示

我们都听到过早的优化,但是什么事关于早重构?是否有任何这样的事情在你的意见吗?

是的,是有的。重构是一种方式 偿债务技术 已累积的生活的发展过程。然而,仅仅是累积的技术债务不一定是坏事。

看看为什么,想象一下,你正在写的税收返回分析软件,用于IRS。突然,新的规章介绍了在最后一分钟它打破几个你原来的假设。尽管你设计好了,你域模式已经从根本上偏离在你的脚下,在至少一个重要的地位。这是四月14日,与项目必须活下去明天来到地狱或高水。你是做什么的?

  • 如果实现一个螺母和螺栓的解决方案费用的一些适度的技术性债务的,你的系统会变得更加僵硬和不能承受一轮又一轮的这些变化。但该网站可以去的生活并继续前进,并不会有风险的交付;你相信你可以做必要的更改。
  • 另一方面,如果您需要时间来重组解决,所以,它现在支持新设计更加复杂和灵活的方式,你不会有任何麻烦适应未来的变化。但是你冒的风险的公司的主打产品运抵时钟;你不知道,如果重新设计,将需要更长的时间比今天。

在这种情况下,第一个选项是更好的选择。假设你有一点先前技术的债务,这是值得的,把你的肿块现在和支付它落后。这当然是一项商业决定,而不是一个设计一个。

我认为有可能过早重构。

设计的末端是代码本身。设计的最后阶段随着代码的存在而存在,它有时会有缺陷,随着代码的发展,你会看到它。如果你过早地重构,就会更难改变有缺陷的设计。

例如,当你意识到它是垃圾或走错方向时,删除一个很好的格式良好的函数及其使用的函数和它们使用的函数等,就更容易删除单个long函数。 ,同时确保你不会破坏重构中的其他东西。

可以说也许你应该花更多的时间来设计,但敏捷过程中的关键因素是编码是设计过程的一部分,在大多数情况下,在设计上付出了一些合理的努力,最好是继续吧。

修改回复评论: -

在您编写代码之前,设计不会完成。我们无法解决预编码设计中的所有问题,敏捷背后的重点是编码 解决问题。如果非代码设计在编码之前预先解决了所有问题,就不需要重新因素,我们只需一步就将设计转换为精心设计的代码。

任何人都记得20世纪80年代末和90年代初期的结构化设计方法,在编写一行代码之前,您可以在聪明的图表中解决所有问题吗?

过早重构是在没有单元测试的情况下进行重构。那时您还没准备好进行重构。首先得到一些单元测试,然后开始考虑重构。否则你会(可能)伤害项目而不是帮助。

我认为任何“1.0”都可以。项目容易受到这种情况的影响......我们称之为“迭代设计”。如果在开始设计对象之前没有明确的规范,您可能会想到许多设计和方法来解决问题。

因此,我认为克服这个具体问题是在开始编写代码之前清楚地设计一些东西。

根据具体情况,这类问题有很多有希望的解决方案。

如果问题在于您决定某些事情可以以某种方式进行优化并且您提取某个方法或某些内容并意识到由于该决定,您将被迫以复杂的方式对其他所有内容进行编码,问题可能就是你在设计过程中没有想太多。如果有一个编写良好且计划好的规范,你会提前知道这个问题(除非你没有阅读规范,但这是另一个问题:))

根据具体情况,快速原型设计也可以解决这个问题,因为当您开始处理真实事物时,您将更好地了解这些实现细节。

我坚信不断的重构。没有理由等到某个特定时间开始重构。

任何时候你都会看到应该做得更好的事情,重构。

请记住这一点。我认识一个开发人员(一个纯粹的天才)如此重构(他非常聪明,总能找到更好的方法)他从未完成一个项目。

过早优化不好的原因是优化通常会导致更糟糕的设计。与重构不同,后者可以提供更好,更清洁的设计,如果做得周到和正确的话。我学到的对于分析重构的有用性有用的是首先查看我们的UML图来可视化更改,然后首先为类编写代码文档(例如Javadoc)并在任何实际代码之前添加存根。当然,经验对此有很大帮助,如果有疑问,请询问您最喜欢的建筑师;)

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