我正在尝试衡量我们组织中产生的代码中有多少实际上是可重用的,我想制定一些指导方针。我想对外部世界有一些参考:
通常在单个应用程序中重用多少代码?更具体地说 - 如果我们考虑一个完整的最终用户产品的所有代码(并最终排除第 3 方库),从多个地方调用多少函数和方法?
哪些指标用于衡量代码可重用性?开源和/或闭源软件是否有可用的数字或研究?
在尝试让它工作一段时间并且四处搜索之后我真的很难过,所以我在这里发帖...我想在我为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 编写一个专家系统(这是我第一次这样做)。我必须实现一个大流程图,它依赖于渐进式用户输入,即用户在流程图的许多点提供输入。在python中,我见过像PyKE这样的知识库和推理规则系统;但是,我不明白这样的系统(类 Prolog)是否会帮助我处理许多 GUI 窗口向用户提出许多问题的过程,或者最好手动对其进行编程。
我应该使用像 PyKE 这样的系统吗?
我找不到如何在 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)
或使用beforeLaunch或onPrepare(但想要一个函数,不确定如何以这种方式公开变量),但没有成功。
但是,对于这种代码重用,我更喜欢通用的 Javascript 方法。
有什么好的方法可以避免在任何地方重复这种常见的代码,尤其是在测试中(mocha、karma、protractor)?
在我的应用程序中,我需要检索过去 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 项目中,我使用 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 仅在我的项目的一个点中使用。
是否有更好/更简洁的解决方案来避免相同异常处理的代码重复?
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) 我们正在计划三个类似的 vue 项目。我们已经知道,我们将能够在所有这些代码中重用大量代码(尤其是 vue SFC 和简单的 js 辅助函数),并且我们正在寻找一种在它们之间共享代码的正确方法。
不幸的是,项目的范围相当不同,并且由于读/写权限和可见性管理方面的限制,单一存储库不是一个选择。因此,我们计划将可重用部分作为单独的存储库(并且很可能是私有 npm 包)来处理,这似乎是一种简单的方法。然而,问题是:我们如何创建一种方便的设置,使我们能够在父项目之一的范围内处理共享组件?
项目 A [项目-repo-a]
项目 B [项目-repo-b]
在我们的 PHP 项目中,有一个简单的解决方案,我们只需要通过 Composer 和 Preferred-source 选项来重用部分,该选项提供了可以在父应用程序中直接使用的完整 git 存储库。然而,据我们了解,npm 或yarn 中没有首选源。那么我们怎样才能实现我们想要的设置呢?(或者我们是否忽略了这种设置的一个主要缺点?)
我们已经研究/考虑了以下内容(没有找到合适的方法):
我想与一些经验丰富的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)
现在我听说游标对性能有害(这是真的吗?).此外,在不同的包中使用类似的游标,从维护的角度来看,我觉得切换到功能会更好.
但是我可以从函数中返回什么?我不认为游标会起作用.你们有什么用?
我正在尝试设置我的ExtJS 4项目,所以我有三个顶级应用程序,例如,
/foo/app.js
/bar/app.js
/baz/app.js
每个"顶级"应用程序都是一个单独的ExtJS应用程序,每个应用程序都有自己的加载器.在某些情况下,我会在所有三个应用程序之间共享一般组件,因此我有/components顶级目录.
如果我有一个组件名称说ComponentA,
/components/componenta.js
我如何将ComponentA引入所有三个应用程序,以便它可以由单个应用程序引用或扩展?
code-reuse ×10
php ×2
python ×2
base-class ×1
components ×1
d3.js ×1
django ×1
extjs ×1
extjs4 ×1
function ×1
getattr ×1
javascript ×1
laravel ×1
methodology ×1
metrics ×1
npm ×1
object ×1
observablehq ×1
oop ×1
oracle ×1
performance ×1
pyke ×1
testing ×1
traits ×1
vue.js ×1
yarnpkg ×1