标签: code-reuse

测量代码可重用性

我正在尝试衡量我们组织中产生的代码中有多少实际上是可重用的,我想制定一些指导方针。我想对外部世界有一些参考:

通常在单个应用程序中重用多少代码?更具体地说 - 如果我们考虑一个完整的最终用户产品的所有代码(并最终排除第 3 方库),从多个地方调用多少函数和方法?

哪些指标用于衡量代码可重用性?开源和/或闭源软件是否有可用的数字或研究?

code-reuse methodology metrics

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

Python,Django,如何使用getattr(或其他方法)来调用具有多个属性的对象?

在尝试让它工作一段时间并且四处搜索之后我真的很难过,所以我在这里发帖...我想在我为django编写的类中创建一些函数尽可能通用,所以我想使用getattr来调用通用方式如下所示的函数:

我这样做的方式(非通用方式):

from django.db.models import get_model
mymodel = get_model('appname', 'modelname')
dbobject = mymodel.objects.all()
Run Code Online (Sandbox Code Playgroud)

我的一个尝试以通用的方式创建它,仍然无法正常工作,它确实返回一些东西,但它不是正确的对象类型,以便我可以从中获取数据(它是django的数据库调用)

ret = getattr(mymodel,'objects')
dbobject = getattr(ret,'all')
Run Code Online (Sandbox Code Playgroud)

python django code-reuse object getattr

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

应该在 Python 中为专家系统使用知识引擎吗?

我需要用 Python 编写一个专家系统(这是我第一次这样做)。我必须实现一个大流程图,它依赖于渐进式用户输入,即用户在流程图的许多点提供输入。在python中,我见过像PyKE这样的知识库和推理规则系统;但是,我不明白这样的系统(类 Prolog)是否会帮助我处理许多 GUI 窗口向用户提出许多问题的过程,或者最好手动对其进行编程。

我应该使用像 PyKE 这样的系统吗?

python code-reuse expert-system pyke

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

如何在 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
查看次数

如何(以及在​​哪里)在 Laravel 中注册自定义查询方法

在我的应用程序中,我需要检索过去 7 天内注册的用户。后来我意识到我还需要检查30天和365天等等。所以我在我的 User.php 中写了一个查询范围:

public function scopeCreatedWithinDays($query,$day){
    $str = $day.' days ago';
    $carbon = new Carbon($str);
    $query->where('created_at', '>=', $carbon);
}
Run Code Online (Sandbox Code Playgroud)

我突然意识到,这种方法非常适合在所有模型中重复使用。所以我需要在一个共同的地方定义这个方法,这样我就可以x通过简单地调用$anyModel->createdWithinDays(30). 但我不知道把它放在哪里以及如何...

php oop code-reuse traits laravel

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

PHP - 在同一个 try-catch 中包装一个变量块

在我的 PHP 项目中,我使用 Guzzle 进行了很多不同的 API 请求。为了处理所有异常,每个 API 调用都被包装到一个 try-catch 块中。一个例子:

        try {
            $res = $client->get($url, [
                'headers' => [
                    'Authorization' => "bearer " . $jwt,
                ]
            ]);
        } catch (ClientException $clientException) {
            // Do stuff
        } catch (ConnectException $connectException) {
            // Do stuff
        }catch (RequestException $requestException){
            // Do stuff
        }
Run Code Online (Sandbox Code Playgroud)

对于每个请求,异常处理是相同的,但实际执行块差异很大,不能简单地用一组选项来描述。

有没有办法创建一个函数/类,能够将自定义执行块包装到相同的 try-catch 处理中?

我想出的唯一选择是使用一个接口,其中包含一个execution()由每个子项扩展的函数和一个run()具有 try-catch 块并$this->execution()在执行块内简单调用的函数。它可以工作,但我发现为每个不同的 API 调用创建一个全新的类过于冗长,而这些 API 仅在我的项目的一个点中使用。

是否有更好/更简洁的解决方案来避免相同异常处理的代码重复?

php error-handling code-reuse

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

如何将 ObservableHq 简单算法解释为可重用的代码片段?

D3js 解决方案的主要来源是observableHq.com,但似乎不可能(?)通过复制/粘贴来重用算法......是吗?即使检查教程这样,有没有简单的方法(用更少的插件或程序员的时间单耗!)检查和重用

示例:我需要一个新的 2020 D3js v5算法来进行缩进树可视化,并且有一个很好的解决方案:observableHq.com/@d3/indented-tree
下载没有用,因为它基于复杂的 运行时类......

但是,似乎是一个简单的图表生成器算法,

chart = {  // the indented-tree algorithm
  const nodes = root.descendants();
  const svg = d3.create("svg")// ...
  // ...
  return svg.node();
}
Run Code Online (Sandbox Code Playgroud)

我可以通过简单的人工逐步将其转换为简单的 HTML,没有复杂的改编,开始<script src="https://d3js.org/d3.v5.min.js"></script>和结束都没有使用Runtime 类吗?


更多细节作为例子

想象我对引用的缩进树算法的逐步说明,我无法完成并需要您的帮助:

假设从一个干净的 HTML5 模板开始。例如:

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>Indented Tree</title>
    <script src="https://d3js.org/d3.v5.min.js"></script>
    <script>
    function onLOAD() {
        console.log("Hello onLoad!")
        // all copy-paste and adaptations …
Run Code Online (Sandbox Code Playgroud)

code-reuse d3.js observablehq

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

如何在不使用 monorepo 的情况下在多个 vue 应用程序中组织代码(组件)共享

我们正在计划三个类似的 vue 项目。我们已经知道,我们将能够在所有这些代码中重用大量代码(尤其是 vue SFC 和简单的 js 辅助函数),并且我们正在寻找一种在它们之间共享代码的正确方法。

不幸的是,项目的范围相当不同,并且由于读/写权限和可见性管理方面的限制,单一存储库不是一个选择。因此,我们计划将可重用部分作为单独的存储库(并且很可能是私有 npm 包)来处理,这似乎是一种简单的方法。然而,问题是:我们如何创建一种方便的设置,使我们能够在父项目之一的范围内处理共享组件?

项目 A [项目-repo-a]

  • A 的项目特定内容
  • 私有包 A [package-repo-a](可在项目 A 内方便地编辑)
  • 私有包 B [package-repo-b](可在项目 A 内方便地编辑)

项目 B [项目-repo-b]

  • B 的项目特定内容
  • 私有包 B [package-repo-b](可在项目 B 内方便地编辑)
  • 私有包 C [package-repo-c](可在项目 B 内方便地编辑)

在我们的 PHP 项目中,有一个简单的解决方案,我们只需要通过 Composer 和 Preferred-source 选项来重用部分,该选项提供了可以在父应用程序中直接使用的完整 git 存储库。然而,据我们了解,npm 或yarn 中没有首选源。那么我们怎样才能实现我们想要的设置呢?(或者我们是否忽略了这种设置的一个主要缺点?)

我们已经研究/考虑了以下内容(没有找到合适的方法):

  • 纱线/npm链接:我们知道,我们通常可以使用链接,但这似乎是一种非常不方便的方法,同时不断开发共享组件(并且总是必须发布它们以反映最新的更改)。
  • 纱线工作区 / lerna:似乎最接近我们想要的,但是它们似乎(或明确)是为 monorepo 方法设计的。最后,他们没有提供一个解决方案来实际将包的 git 源代码(在单独的存储库中)获取到父项目中(因为没有 --prefer-source 的东西) - 他们是吗?
  • 另外使用composer:只需使用composer拉取git源并从composer供应商文件夹创建yarn工作区。然而,这显然是一种 hacky 方式,并且对于整个依赖管理来说听起来很容易出错
  • 使用yarn安装后脚本来获取所需私有包的git源,但作为作曲家的方式,这在模块解析、依赖管理等方面似乎是相当不可预测的。
  • 使用 git 子模块和纱线工作区:可能是一个解决方案。老实说,我们对 …

code-reuse package-managers npm vue.js yarnpkg

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

使用可重复使用的代码编写程序的建议做法是什么?

我想与一些经验丰富的Oracle开发人员讨论后端开发的最佳实践.

我编写了许多以XML格式打印数据并由HTTP服务使用的软件包.

为此,我遍历游标并使用htp.p打印数据.

例如

for i in c_my_cursor loop
  htp.p('<element>', i.data_field, '</element>');
end loop;
Run Code Online (Sandbox Code Playgroud)

现在我听说游标对性能有害(这是真的吗?).此外,在不同的包中使用类似的游标,从维护的角度来看,我觉得切换到功能会更好.

但是我可以从函数中返回什么?我不认为游标会起作用.你们有什么用?

oracle performance code-reuse design-patterns function

4
推荐指数
1
解决办法
142
查看次数

在ExtJS 4下有没有办法加载外部组件?

我正在尝试设置我的ExtJS 4项目,所以我有三个顶级应用程序,例如,

/foo/app.js
/bar/app.js
/baz/app.js

每个"顶级"应用程序都是一个单独的ExtJS应用程序,每个应用程序都有自己的加载器.在某些情况下,我会在所有三个应用程序之间共享一般组件,因此我有/components顶级目录.

如果我有一个组件名称说ComponentA,

/components/componenta.js

我如何将ComponentA引入所有三个应用程序,以便它可以由单个应用程序引用或扩展?

code-reuse components extjs extjs4

4
推荐指数
1
解决办法
1897
查看次数