标签: code-duplication

抛出额外的异常以避免代码重复

首先,我知道标准答案是异常永远不会用于流量控制.虽然我完全赞同这一点,但我一直在思考我有时做过的事情,我将用以下伪代码描述:

try
    string keyboardInput = read()
    int number = int.parse(keyboardInput)
    //the conversion succeeds
    if(number >= 1000) 
        //That's not what I asked for. The message to display to the user
        //is already in the catch-block below.
        throw new NumberFormatException() //well, there IS something wrong with the number...
 catch(NumberFormatException ex)  //the user entered text
    print("Please enter a valid number below 1000.")
Run Code Online (Sandbox Code Playgroud)

首先,以非常抽象的方式来看这个例子.这不一定必须发生.情况只是:

用户输入需要受到约束,并且可以通过两种方式出错,无论是通过语言定义的抛出异常,还是通过检查.用户以相同的方式报告这两个错误,因为他们不需要知道导致错误的技术差异.

我想到了几种解决方法.首先,抛出自定义异常会更好.我当时遇到的问题是,如果我在本地捕获它,如何处理另一个异常?在se中,自定义异常将导致第二个catch块,其中消息也将被复制到其中.我的解决方案

//number is wrong
throw new MyException()
catch(NumberFormatException ex) 
    throw new MyException()
catch(MyException ex) {
    print("Please enter...") …
Run Code Online (Sandbox Code Playgroud)

theory exception code-duplication

6
推荐指数
2
解决办法
362
查看次数

在实现迭代器和const_iterator类时避免代码重复的最佳实践

在实现诸如iterator和/ const_iterator或类似的类对时避免代码重复的最佳实践是什么?

  • 是否通常使用大量const_casts在const_iterator方面实现迭代器?
  • 是否使用某种traits类并最终将iterator和const_iterator定义为公共模板的不同实例?

这似乎是一个普遍的问题,有一个规范的解决方案,但我没有找到任何专门的文章.

c++ class-design const code-duplication

6
推荐指数
1
解决办法
245
查看次数

如何处理Linux下的重复代码?

我正在寻找使用大约150k行代码处理遗留PHP项​​目中的重复代码的最佳方法.

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

php linux copy-paste code-duplication

5
推荐指数
1
解决办法
537
查看次数

删除冗余的SQL代码

下面的代码计算线性回归的斜率和截距,以防止数据泄漏.然后,它将方程应用于y = mx + b相同的结果集,以计算每行的回归线的值.

如何连接两个查询,以便计算数据及其斜率/截距而不执行该WHERE子句两次?

问题的一般形式是:

SELECT a.group, func(a.group, avg_avg)
FROM a
    (SELECT AVG(field1_avg) as avg_avg
     FROM (SELECT a.group, AVG(field1) as field1_avg
           FROM a
           WHERE (SOME_CONDITION)
           GROUP BY a.group) as several_lines -- potentially
    ) as one_line -- always
WHERE (SOME_CONDITION)
GROUP BY a.group -- again, potentially several lines
Run Code Online (Sandbox Code Playgroud)

SOME_CONDITION执行了两次.如下所示(通过STRAIGHT_JOIN优化更新):

SELECT STRAIGHT_JOIN
  AVG(D.AMOUNT) as AMOUNT,
  Y.YEAR * ymxb.SLOPE + ymxb.INTERCEPT as REGRESSION_LINE,
  Y.YEAR as YEAR,
  MAKEDATE(Y.YEAR,1) as AMOUNT_DATE,
  ymxb.SLOPE,
  ymxb.INTERCEPT,
  ymxb.CORRELATION, …
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql code-duplication ireport

5
推荐指数
1
解决办法
953
查看次数

在对表,其布局和记录建模时,如何避免代码重复,所有这些都共享相同的基本结构?

这将是一个有点抽象的问题.

我正在研究一个数据访问层框架,它需要区分表,它的抽象模式/布局和具体的表记录.我担心由于这种区别,会有很多代码重复.我可能需要一些方法来避免这种情况.

+-----------+
|    Foo    |
+-----------+
| +Id: Guid |
+-----------+
Run Code Online (Sandbox Code Playgroud)

请注意,此图可以描述以下任何一种:表模式,具体表或具体表记录,具有Id类型的字段Guid.

  • 架构中已知的所有内容都是字段的名称和类型.
  • 在具体(打开)表中,字段的"列索引"是另外已知的.
  • 有了记录,所有这些都是已知的,而且该字段具有特定的价值.

把它翻译成代码,我会得到很多类似的类型(成对的三种).我将使用接口来保持示例简短; 我要展示的是类型的相似性:

// these interfaces only need to be implemented once:

interface ISchemaField<T>  {  string Name  { get; }       }


interface ITableField<T>   {  string Name  { get; }        
                              int    Index { get; }       }

interface IRecordField<T>  {  string Name  { get; }        
                              int    Index { get; }       
                              T      Value { get; set; }  }
Run Code Online (Sandbox Code Playgroud)
// these three interfaces are an …
Run Code Online (Sandbox Code Playgroud)

c# data-access-layer code-duplication separation-of-concerns

5
推荐指数
1
解决办法
247
查看次数

Rails Jquery 从另一个 js.erb 文件渲染 js.erb 部分

我在不同模型的 ajax 响应之间有重复的 js.erb 代码。我想通过将参数传递到 js.erb 部分来重构重复的 js.erb 代码。

如何从 js.erb 文件呈现 js.erb 部分?

ajax jquery erb code-duplication ruby-on-rails-3

5
推荐指数
1
解决办法
2154
查看次数

避免多个 C++ 模板专业化上的代码重复

我四处寻找一个好的解决方案,以避免模板类的每个专业化上的代码重复。

这是一个示例代码:

template<class T>
class C
{
    int foo();
}
Run Code Online (Sandbox Code Playgroud)

现在默认值的定义:

template<class T>
C<T>::foo() { return 0; }
Run Code Online (Sandbox Code Playgroud)

现在特殊模板的专业化

template<> C<int>::foo()    { ... do a lot of stuff and return n .... }
template<> C<double>::foo() { ... do a lot of stuff and return n .... }
template<> C<int>::foo()    { ... do a lot of stuff and return n .... }
Run Code Online (Sandbox Code Playgroud)

现在我必须复制专门化的代码。但总的来说,它是相同的代码。

我的问题是:避免代码重复的最佳解决方案是什么以及如何隐藏实现?也许通过使用 noname-namespace 或 impl-namespace ?

亲切的问候,彼得

c++ templates code-duplication

5
推荐指数
1
解决办法
1385
查看次数

如何在 Javascript 中添加所有测试使用的全局变量?

我找不到如何在 Javascript 中删除代码重复(基本上是我在 Java 中使用基类实现的)。

具体示例是(至少)以下代码,它对所有规范文件(以及潜在的页面对象,因为我正在量角器中使用该模式进行测试)都是通用的:

var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
var expect = chai.expect;
Run Code Online (Sandbox Code Playgroud)

我可以做一些有希望随处可得?我尝试在量角器配置中在规范之前加载一个文件:

specs: [
  'e2e/helpers/commonDefinitions.js',
  'e2e/**/*.spec.js'
]
Run Code Online (Sandbox Code Playgroud)

或使用beforeLaunchonPrepare(但想要一个函数,不确定如何以这种方式公开变量),但没有成功。

但是,对于这种代码重用,我更喜欢通用的 Javascript 方法。

有什么好的方法可以避免在任何地方重复这种常见的代码,尤其是在测试中(mocha、karma、protractor)?

javascript testing code-reuse code-duplication base-class

5
推荐指数
1
解决办法
2158
查看次数

排除 Sonarqube 在两个特定类之间的重复代码检查

我将 Sonarqube 与 Jenkins 一起使用来检查各种违规行为。有两个类AB,它们有很多重复的代码。我知道并接受这一点。因此,我想忽略这些违规行为。但是,我仍然希望了解来自其他类(例如 C)的重复代码。我只想忽略A和之间的重复代码B。我怎样才能做到这一点?

java code-duplication sonarqube

5
推荐指数
1
解决办法
4024
查看次数

如何检测多个Python源文件之间的代码重复?

我已将所有 python 项目源放在一个文件夹中。运行以下命令pylint似乎只是在每个源文件中查找和分析重复项,而不是在我想要的所有源文件中查找和分析重复项:

pylint --disable=all --enable=duplicate-code /some/source/folder/
Run Code Online (Sandbox Code Playgroud)

有没有办法在许多源文件中查找重复的代码?

python code-analysis static-analysis pylint code-duplication

5
推荐指数
0
解决办法
1285
查看次数