3
由于猫鼬处理它们的方式以及因为mongoose=require('mongoose')
是singelton,我还没有找到一种简单的方法来扩展Mongoose Schema/Model方法。有没有更优雅的方式来“伪造”类继承?
所以,我“假装”类继承的位置:
'use strict';
var _ = require('lodash');
module.exports = function(MongooseModel, options) {
var Collection = {};
_.assign(Collection, _.toPlainObject(MongooseModel));
Collection.pluralName = Collection.modelName + 's';
Collection.foo = Collection.bar;
return Collection
};
有没有人有一个更优雅的解决方案吗?
编辑:
原来,上述解决方案不起作用。例如,使用Collection.find({}, function(err, docs) {...})
会在Mongo尝试从尚未在Mongoose中注册的模型创建“文档”时出错。
所以,现在我所做的是完全不雅:
“使用严格的”;
var _ = require('lodash');
module.exports = function(MongooseModel, options) {
var Collection = MongooseModel;
...
return Collection
};
我不认为这是不好看的。您只是将它用作Mixin,它是Composition。它看起来很好,因为你的对象和MongooseModel之间的依赖关系较少。 –
如果它困扰你,你可能会考虑创建一个工厂方法并在那里移动这个_.assign逻辑。然后像使用构造函数一样使用此Factory Method。 –
为了说明为什么我认为这看起来很好,埃里克艾略特有关于这个问题的文章和谈话:http://ericleads.com/2013/06/classical-inheritance-is-obsolete-how-to-think- in-prototypal-oo /和https://medium.com/javascript-scene/common-misconceptions-about-inheritance-in-javascript-d5d9bab29b0a#.sq5r9ln5f –