gpt4 book ai didi

javascript - 使用组合的通用 JavaScript 模型

转载 作者:搜寻专家 更新时间:2023-10-31 23:59:46 24 4
gpt4 key购买 nike

我目前正在使用如下几个 JavaScript 模型开发 Node.js 应用程序:

function Role(data) {
this.data = data;
...
}

Role.prototype.save = function(...) {...}

Role.findById = function(...) {...}
Role.findAll = function(...) {...}

对于大多数功能,它们都使用相同(相似)的逻辑,但有些需要不同的实现来保存等等。所以我的想法是通过使用某种组合来重构它们。我当前的解决方案是结合使用原型(prototype)函数的继承和静态函数的适配器。看起来像这样。

var _adapter = new DatabaseAdapter(SCHEMA, TABLE, Role);

function Role(data) {
Model.call(this, _adapter, Role._attributes)
this.data = data;
...
}

Role._attributes = {
name: ''
}

Role.prototype.save = function(...) {...}

Role.findById = function(...) {
_adapter.findById(...);
}

Role.findAll = function(...)
{
_adapter.findAll(...)
}

但是,我对我当前的解决方案并不是很满意,因为开发人员需要了解很多实现细节才能创建新模型。所以,我希望有人能告诉我更好的方法来解决我的问题。

谢谢,亨德里克

编辑经过一番研究,我想出了以下解决方案:

榜样:

 Role.schema = 'db-schema-name';
Role.table = 'db-table-name';
Role.attributes = { /* attributes of the model */ }

Role.prototype.save = genericSaveFunc;

Role.findById = genericFindByIdFunc;
...

一般保存:

 function genericSaveFunc(...) {
if (this.id) {
// handle update
// attributes in 'this' will be updated
} else {
// handle create
// attributes in 'this' will be updated
}
}

静态通用函数 findById:

 function genericFindByIdFunc(...) {
/* use this.schema && this.table to create correct SELECT statement */
}

模型创建可以包装到工厂函数中。这个解决方案的好处是可以简单地创建具有不同类型功能的新模型(例如,只将 savefindById 添加到模型中)。但我不知道依赖泛型函数的调用上下文是否是个好主意?

最佳答案

自从您使用基于原型(prototype)的语言以来。无需尝试进行类继承。看看stampit它会让你很容易地以 JavaScript 的方式进行组合:)

关于javascript - 使用组合的通用 JavaScript 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39116766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com