问题标签 [code-duplication]

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 回答
526 浏览

c++ - 正交变量代码重复问题

我最近开始重构一些遗留代码并遇到了两个用于绘制坐标网格的函数,问题是这些函数仅在它们处理的正交变量上有所不同,就像这样

因此,如果我决定添加一些花哨的东西,例如抗锯齿或仅仅更改绘图铅笔或其他任何东西,我将不得不在它们两者中放入相同的代码,这是代码重复,这很糟糕,我们都知道为什么。

我的问题是如何将这两个函数重写为一个函数以避免这个问题?

0 投票
3 回答
198 浏览

oop - 如何防止同一业务对象的多个类?

很多时候,我会有一个业务对象,它具有用户索引的属性或某些数据的一组索引。当我在表单或其他视图中显示此对象时,我需要用户全名或数据的其他一些属性。通常我会创建另一个类 myObjectView 或类似的东西。处理这种情况的最佳方法是什么?

进一步澄清:如果我有一个问题跟踪器类,并且我的问题类具有 IxCreatedByUser 作为属性和 IxAttachment 值的集合(附件记录的索引)。当我在网页上显示此内容时,我想显示 John Doe 而不是 IxCreatedByUser,并且我想在页面上显示指向附件和文件名的链接。所以通常我创建一个带有附件对象集合和 CreatedByUserFullName 属性或类似性质的新类。创建第二个类以在页面上显示数据只是感觉不对。也许我错了?

0 投票
21 回答
47452 浏览

c++ - 如何删除类似的 const 和非常量成员函数之间的代码重复?

假设我有以下class X要返回对内部成员的访问权限的地方:

这两个成员函数在大括号X::Z()X::Z() const具有相同的代码。这是重复的代码,可能会导致逻辑复杂的长函数出现维护问题

有没有办法避免这种代码重复?

0 投票
11 回答
24570 浏览

unit-testing - 在单元测试中重复代码是否更容易容忍?

前段时间我破坏了几个单元测试,当我经历并重构它们以使它们更加干燥时——每个测试的意图不再清晰。似乎测试的可读性和可维护性之间存在权衡。如果我在单元测试中留下重复的代码,它们更具可读性,但是如果我更改SUT,我将不得不追踪并更改重复代码的每个副本。

你同意这种权衡存在吗?如果是这样,你更喜欢你的测试是可读的还是可维护的?

0 投票
13 回答
29967 浏览

c++ - 如何在开发过程中检测代码重复?

我们有一个相当大的代码库,400K LOC 的 C++,代码重复是个问题。是否有任何工具可以有效地检测重复的代码块?

理想情况下,这将是开发人员可以在开发过程中使用的东西,而不是偶尔运行以查看问题所在。如果我们可以将这样的工具与 CruiseControl 集成,以便在每次签到后提供报告,那也很好。

前段时间我看过Duploc,它显示了一个很好的图表,但需要一个 smalltalk 环境才能使用它,这使得自动运行它相当困难。

免费工具会很好,但如果有一些好的商业工具我也会感兴趣。

0 投票
2 回答
723 浏览

unit-testing - 如何在测试中避免重复代码并避免嘲笑自己?

在我的问题中,作为“mockist” TDD 从业者,我是否应该在与被测方法相同的类中模拟其他方法?, Avdi回答说:“我个人认为嘲笑 self 几乎总是一种代码味道。它是在测试实现而不是行为。” 他可能是对的,但我常常无法区分实现和行为。

我有另一个示例(在 Python 样式的伪代码中)可能会导致有用的答案:

这里的想法是 get_components 方法调用 spec_filepath 方法以获取 get_components_from_spec_file 组件类方法将从中读取组件列表的文件的路径。spec_filepath 方法依次调用spec_dirpath,它从VCS 系统同步包含spec 文件的目录并返回该目录的路径。(尽量不要在这段代码中寻找错误——毕竟它是伪代码。)

我正在寻找有关如何测试这些方法的建议...

测试 spec_dirpath 应该非常简单。我可以模拟 VCS 类并让它返回一个模拟对象并确认调用了适当的方法(并且 spec_dirpath 方法返回模拟的 dirpath 方法返回的内容)。

但是,如果我在测试 spec_filepath 时不模拟 spec_dirpath,如何避免在 spec_filepath 测试中从 spec_dirpath 代码中复制相同的测试代码?如果我在测试 get_components 时不模拟 spec_filepath,如何避免从 spec_filepathspec_dirpath 复制测试代码?

0 投票
1 回答
2338 浏览

c# - C# 使用“as”覆盖 Equals 和用于正确性、灵活性和性能的专用方法

我想知道在 C# 中实现正确、灵活和快速的 Equals 的最佳方法,它几乎可以用于任何类和情况。我认为性能需要一个专门的 Equals(将实际类的对象作为参数)。为了避免代码重复,一般的 Equals 应该调用专门的 Equals。空值检查应该只执行一次,即使在继承的类中也是如此。

我终于想出了这个设计:

重要的想法:

  • “as”运算符的用法。这样我们就不必检查一般 Equals 中的空值。错误的类类型会减少为 null,并将在专门的 Equals 中进行排序。
  • 在某一点进行空值检查,即使对于派生类也是如此。
  • 一个接一个地检查属性提供了一个清晰的结构。

这个概念有缺陷,还是我错过了任何条件?

0 投票
4 回答
583 浏览

php - Linux下如何处理重复代码?

我正在寻找处理具有大约 150k 行代码的遗留 PHP 项目中重复代码的最佳方法。

这是最好的手动方法还是有独立的重复代码检测器可以减轻痛苦?

0 投票
7 回答
1462 浏览

c# - 代码复制的最佳实践 c#

我正在尝试以减少/避免代码重复的方式构造我的代码,但我遇到了一个有趣的问题。每次我的代码调用存储过程时,我都需要传递一些存储过程共有的变量:例如用户名、域、server_ip 和 client_ip。这些都来自 HttpRequest 对象或 system.environment 对象。

由于这些被传递给每个存储过程,我最初的想法是创建一个实用程序类,它是一个数据库包装器,并且每次都会初始化并传递它们,所以我不必在我的代码中这样做。问题是尽管 c# 类(在 App_Code 文件夹内)看不到 Httprequest 对象。当然,我可以将此作为参数传递给包装器,但这会破坏创建包装器的整个目的。我在这里错过了什么吗?

我意识到每次调用存储过程时重复 4 行代码并不是什么大不了的事,但我宁愿在早期阶段消除代码重复。

0 投票
9 回答
687 浏览

coding-style - 如何重构快速发展的代码?

我有一些研究代码是真正的老鼠窝,到处都是重复的代码,显然需要重构。然而,代码库正在演变,因为我提出了新的主题变体并将它们融入代码库。我推迟重构这么久的原因是因为我觉得我花了几天时间提出好的抽象,看看什么样的设计模式适合哪里等等,我想尝试一些新的不可预见的想法使我的抽象完全不充分。换句话说,由于代码的发展速度,我真的不知道抽象线属于哪里,即使不乏(近似)重复,而且代码的一般混乱使得向其中添加东西成为现实痛。