问题标签 [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 投票
6 回答
1451 浏览

c++ - 大型代码库上的代码标准重构

我的工作室有一个庞大的代码库,已经开发了 10 多年。我们开始使用的编码标准是由内部少数开发人员开发的,而且早在我们不得不担心任何与 C++ 相关的标准之前。

最近,我们在内部启动了一个小型研发项目,我们更新了编码约定以更适合我们的环境。研发工作将被整合到现有的项目代码中。我们面临的一个主要问题是,我们现在有两个工作领域的两个标准,现在代码库将交叉。我不希望工作室有两个标准,实际上我很高兴能推进一个单一的标准。(我们如何进入这种情况并不重要——只是我们是,我希望我们不会是。)

问题在于重构现有代码。我不太希望有两个看起来不同的代码库(一个相对较小,一个非常大)。我有兴趣对现有代码库之一进行一些重构,以使其符合其他标准。问题是,代码库越小(IMO),标准就越受欢迎。

我开始四处寻找可以为我进行大规模重构的工具。我对重新排列和收紧代码不感兴趣。我有兴趣改变一些事情,比如

基本上是在做函数/变量级别的重命名。我不想使用 Visual Assist 之类的东西,因为这需要很长时间。我有超过 10000 个源/头文件和数十万行代码。一次使用 VA 一个课程将是一个时间杀手,不值得付出努力。

我确实在 SO 的另一篇文章中遇到了Vera。这似乎可以完成这项工作并且做得很好。我想知道是否有人对我所处的情况有使用 Vera 的特定经验,或者对可能完成工作的工具有任何其他建议。我认为这个工具真正理解代码结构很重要,这样我们就不会只是以搜索/替换的方式重命名变量,因为如果不小心这样做会导致微妙的错误。

编辑:虽然我的示例显示我将从在名称之间使用 _ 到驼峰式类型表示法,但换一种方式可能对我们更有利。我真的在寻找一种有助于大规模重命名的通用解决方案。

谢谢。

0 投票
5 回答
313 浏览

language-agnostic - 我应该把“丑”放在哪里?

场景:我有一个需要以某种方式调整的功能(例如;使其在不同地方的工作方式略有不同)。出于某种原因,我最终不得不在代码中添加一些丑陋的东西,无论是在函数中还是在现有的调用站点。假设在这两种情况下,“丑陋”的总和是相同的。

问题是我应该选择哪个选项,为什么?

我应该封装它以便我不需要查看它还是应该提取它以便它不会向函数添加语义垃圾?

什么会影响你的选择?如果:

  • 除了从当前位置之外,该函数将“永远不会”被调用。
  • 对函数的新调用不需要“丑陋”。
  • 该功能现在非常干净和通用
  • 该功能已经是一项黑客工作。
  • 你写了函数
  • 你没有写出这个功能
  • 等等
0 投票
5 回答
3207 浏览

delphi - Delphi 7中的“重命名控件”?

跟进这个问题,我正在研究一个写得不是很好的大型 Delphi 7 代码库。

我正在看这样的代码,作为一个小例子:

其次是另外 6 个非常相似的块。整件事情都是这种风格。所以我认为如果控件命名合理,这将更容易阅读。

我可以只使用全局搜索和替换,但是当多个表单使用相同的名称时我会遇到问题,而且我必须小心在 SpeedButton1 之前更改(例如)SpeedButton10。

是否有一些插件能够为我执行“智能”重命名?

编辑:
抱歉,我之前应该提到过这一点:我尝试了 GExperts 和 Castalia 的“重命名组件”功能,但它们似乎都是在最初将组件添加到表单时使用的。

他们不会在代码中进行搜索+替换,也不会重命名现有事件 (SpeedButtonXClick() -> cmdCreditClick())。

我错过了什么吗?

0 投票
19 回答
7220 浏览

asp.net-mvc - ASP.NET MVC 从 Preview 5 升级到 Beta 期间的问题?

当您从 ASP.NET MVC Preview 5 升级到新发布的Beta版本时,您需要做哪些问题或重构?

0 投票
3 回答
791 浏览

ruby-on-rails - 我可以用鸭子打字改进这种方法吗?

希望我没有误解“鸭子类型”的含义,但从我所读到的,这意味着我应该根据对象如何响应方法而不是它是什么类型/类来编写代码。

这是代码:

我想要的是确保我最终得到一个散列,其中键是一个整数,表示 ActiveRecord 对象的 ID。我不是特别喜欢必须遍历哈希键两次all?以确定是否需要取出 ID。

当然,我也会接受任何其他改进此代码的建议 :)

0 投票
6 回答
1616 浏览

c# - 删除 C# 中重复的硬编码循环和条件

我有一个类,它比较相同对象的 2 个实例,并生成它们的差异列表。这是通过循环遍历关键集合并使用已更改的列表填充一组其他集合来完成的(查看下面的代码后可能更有意义)。这有效,并生成一个对象,让我知道在“旧”对象和“新”对象之间究竟添加和删除了什么。
我的问题/担忧是……它真的很丑,有很多循环和条件。有没有更好的方法来存储/处理这个,而不必如此依赖无休止的硬编码条件组?


目标框架是 3.5。

0 投票
4 回答
1923 浏览

performance - 重构存储过程

我有一个存储过程当前正在执行一个复杂的提取,该提取在使用时经常超时。我部门提出的解决方案是简单地增加超时时间;我真的不想这样做。我想重构这个存储过程,但是因为它非常复杂且没有文档记录(是的遗留系统),我担心我的重构不会导致相同的功能更有效地执行。在重构存储过程以确保在更短的时间内执行相同的功能时,是否可以使用任何策略?

这是一个 Microsoft SQL Server 2005 存储过程。

0 投票
4 回答
665 浏览

c# - 重构以消除 Lambda 表达式中的重复

这两种方法表现出重复:

我该如何重构以消除这种重复?

更新:糟糕,我忽略了一个重点。FooEditDto 是 FooDto 的子类。

0 投票
5 回答
2114 浏览

javascript - 在 JavaScript 中是否有“正确”的继承方式?如果是这样,它是什么?

我一直在尝试学习如何向现有代码添加测试——目前正在阅读有效地使用遗留代码。我一直在尝试在 JavaScript 中应用一些原则,现在我正在尝试提取一个接口。

在寻找用 JavaScript 创建接口的过程中,我找不到很多东西——而我发现的关于继承的东西似乎有几种不同的方式。(有些人创建自己的基类以提供有用的方法,使继承更容易,有些人使用函数,有些人使用原型)。

什么是正确的方法?有一个在 JavaScript 中提取接口的简单示例吗?

0 投票
3 回答
627 浏览

python - 使用 windows python 2.3 进行传入 poplib 重构

嗨,伙计们,你能帮我重构一下,让它看起来像 Python 一样。

同样在 _replace_whitespace 方法中,我希望有某种清理例程,它可以删除所有可能导致处理的非法字符。

基本上我想以标准方式将电子邮件写入收件箱目录。

我在这里做错了吗?