问题标签 [refactoring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
759 浏览

version-control - 重构和源代码控制:如何?

我完全赞同 TDD、重构和模式背后的想法,但是这些想法似乎确实存在巨大的差距,主要是它们非常适合 1 人的开发团队,但是当你开始重构代码时,10 人是处理您的工作时,您开始在各处遇到合并冲突,并且大多数 diff/merge 软件无法判断您将函数重构为自己的类。

你如何通过重构来清理你的代码,而不会给团队中的每个人带来严重的麻烦?

0 投票
3 回答
4869 浏览

jquery - 处理多个 jQuery 电子邮件字段表单验证的最佳重构

重构附加代码以适应多个电子邮件地址的最佳方法是什么?

附加的 HTML/jQuery 是完整的,适用于第一个电子邮件地址。我可以通过复制/粘贴和更改代码来设置另外两个。但我想重构现有代码来处理多个电子邮件地址字段。

0 投票
8 回答
2041 浏览

ruby-on-rails - Ruby 中的重构

是否有任何程序或 IDE 支持重构 Ruby 或 RoR?

0 投票
17 回答
4251 浏览

refactoring - 重写遗留代码

我的部门目前面临着维护相当大的 COBOL 代码库的任务。我们想知道如何添加新功能以满足业务需求。现在 COBOL 程序员很难找到,而且我们还认为使用 Java 或 C# 等更现代的语言可以提高工作效率。

我们觉得我们有四种选择:

  1. 从头开始重写所有内容,将旧应用程序留给自己,直到它准备好被替换
  2. 从头开始重写一切,让一些人维护旧应用程序以应对新的业务需求,因为正在构建新的应用程序
  3. 用现代语言编写所有新功能,并找到将新代码与旧功能集成的方法。
  4. 继续维护旧应用程序。

您认为对我们来说最好的选择是什么,为什么?

0 投票
18 回答
2419 浏览

refactoring - 您如何向吝啬的老板证明重构工作的合理性?

您刚刚编写了一堆代码,以便在压力下交付一些重要的功能。你已经走捷径了,你已经将一些代码混入了一些过于臃肿的类,其名称如 SerialIndirectionShutoffManager..

你告诉你的老板你需要一周的时间来清理这些东西。

“清理什么?”

“我的密码——它是猪圈!”

“你的意思是还有一些错误修复?”

“不是,更像是……”

“你会让它跑得更快吗?”

“也许吧,但那不是……”

“那你应该在有机会的时候把它写好。现在我很高兴你在这里,是的,我得继续请你这个周末来..”

我读过 Matin Fowler 的书,但我不确定我是否同意他对此事的建议:

  • 鼓励定期进行代码审查,因此鼓励将重构工作作为开发过程的一个自然部分。
  • 只是不要说,你是开发人员,这是你职责的一部分。

这两种方法都是出于与经理沟通的需要。

你跟老板说什么?

0 投票
14 回答
4236 浏览

refactoring - 无情地重构或构建一个扔掉?

在使用新的系统概念或新技术的地方,人们必须建立一个可以丢弃的系统,因为即使是最好的计划也不是无所不知的,以至于第一次就做好了。因此打算扔掉一个;无论如何,你会的。

——弗雷德·布鲁克斯,神话般的人月[强调我的]

建一个扔掉。他们就是这么告诉我的。然后他们告诉我,我们现在都很敏捷,所以我们应该无情地重构。是什么赋予了?

重构我的出路总是更好吗?如果没有,任何人都可以提出一个经验法则来帮助我决定何时坚持下去,何时放弃并重新开始?

0 投票
22 回答
59138 浏览

c++ - C++ 代码的单元测试 - 工具和方法

我正在开发一个已经开发了几年的大型 c++ 系统。作为提高现有代码质量的努力的一部分,我们参与了一个大型的长期重构项目。

你知道一个可以帮助我用 C++ 编写单元测试的好工具吗?也许类似于 Junit 或 Nunit 的东西?

任何人都可以就为没有考虑单元测试而编写的模块编写单元测试的方法提供一些好的建议吗?

0 投票
2 回答
218 浏览

.net - 构造 ArgumentException 时如何以编程方式确定参数名称?

在构造 ArgumentException 时,一些重载采用一个字符串,该字符串是无效参数的参数名称。我认为每当我更改方法的参数名称时不必记住更新此 ctor 参数会很好。有没有一种使用反射的简单方法来做到这一点?

更新:感谢到目前为止的 2 位受访者。你们都很好地回答了这个问题,但解决方案仍然让我很头疼。(好吧,有点头疼,但仍然......)解释一下,如果我稍后重新排序参数 - 或删除更早的参数 - 我必须记住再次更改我的异常构造代码。有没有办法我可以使用类似的东西

确定我正在处理相关参数?这样,编译器会介入以防止我错误地构造异常。

也就是说,我开始怀疑原始问题的“简单”部分并不是那么即将到来。也许我应该忍受使用字符串文字。:)

0 投票
5 回答
10154 浏览

java - eclipse可以将类文件中的第二个类提取到自己的文件中吗

我经常首先通过在我正在处理的类中创建一个内部类来重构代码——当我完成后,我将整个东西移动到一个新的类文件中。这使得将代码重构到新类中非常容易,因为 A)我只处理一个文件,并且 B)我不会创建新文件,直到我对名称/名称有一个很好的了解(有时它会结束作为一个以上的类)。

Eclipse 有什么办法可以帮助我完成最后一步吗?我应该能够告诉它我想要类在哪个包中,它可以从类名中找出文件名,从包中找出目录。

这似乎是一个微不足道的重构并且非常明显,但我无法弄清楚击键/手势/任何让它发生的东西。我尝试过拖动、菜单、上下文菜单和浏览键盘快捷键。

有人知道这个吗?

[编辑] 这些已经是这个文件中的“顶级”类,而不是内部类,并且“移动”似乎不想为我创建一个新类。这是我通常做的艰难的方式——包括走出去,创建一个空班,回来和搬家。我想一步完成整个事情。

0 投票
6 回答
1364 浏览

c# - 如何从继承自 CollectionBase 的类重构为泛型?

我正在开发一个大约 250,000 行代码的应用程序。我目前是唯一一个开发这个最初在 .NET 1.1 中构建的应用程序的开发人员。Pervasive through 是一个继承自 CollectionBase 的类。所有数据库集合都继承自此类。我正在考虑重构以从通用集合 List 继承。不用说,Martin Fowler 的重构书没有任何建议。我应该尝试这个重构吗?如果是这样,解决此重构的最佳方法是什么?

是的,自始至终都有单元测试,但没有 QA 团队。