我有一个在浏览器和服务器中应该具有相同结构和行为的模型。为了能够重用代码,我选择了 NodeJS。我认为这不是那么简单的任务,但是感谢这篇文章,我现在可以编写通用代码。
尝试序列化我的模型时遇到了问题。每类对象都应该有自己的 ID(如a.b.C
),所以当对象被序列化时,这个 ID 被添加到 JSON 中,然后用于创建空对象以将其反序列化。
这意味着当我们获取JSON时,我们需要获取ID,然后通过它找到模块,然后创建空对象并填充它。因此,我们需要有模块 ID 和模块的映射。将其命名为“注册”。
寄存器需要初始化。为此,我们需要在序列化开始之前加载所有依赖项。如果我们以常规的 RequireJS 方式执行此操作,它将如下所示:
define([
"odm/model/core/serializing/Person",
"odm/model/core/serializing/Man"
],
function (require, Person, Man) {
var register = {
_name_cls:{},
_cls_name:{}
};
register.register = function (names) {
for (var i = 0; i < names.length; i++) {
var name = names[i];
var cls = require(name);
register._name_cls[name] = cls;
register._cls_name[cls] = name;
}
};
register.byName = function (name) {
return register._name_cls[name];
};
register.byCls = function (name) {
return register._cls_name[name];
};
register.register([
"odm/model/core/serializing/Person",
"odm/model/core/serializing/Man"
]);
return register;
});
如您所见,要注册新对象,我们需要在 register 的 3 个位置手动添加它 - 链接到模块,模块作为函数参数中的参数,模块作为 register(names) 函数的参数。
有没有更简单的方法来注册对象?