【问题标题】:Is it make sense to wrap mongoose model to own API?将猫鼬模型包装到自己的 API 是否有意义?
【发布时间】:2013-05-24 21:24:02
【问题描述】:

我试图理解为使用 Mongoose 模型制作自己的 API 是否有意义?

假设我们有一个简单的 Mongoose 用户模型:

var UserSchema = new mongoose.Schema({
  email: { type: 'string', required: true, unique: true, lowercase: true },
  password: { type: 'string', required: true },
  name: {type: 'string'}
});

var UserModel = mongoose.model('User', UserSchema);

对于一个抽象的应用程序,用户模型应该有'create'、'delete'、'update'、'find'、'authenticate'等方法。所以我有两种方法来实现这个目的:

  1. 将这些方法包含在 Mongoose 模型中,如下所示:

    UserSchema.static('create', function (data, callback) {
         var user = new User(data);
         user.save(function (err) {
             if (err) return callback(err);
    
             return callback(null, user);
        });
     });
    
  2. 在自定义 User 类中包装一个方法,如下所示:

    UserProvider = function(){};
    
    UserProvider.prototype.create = function(data, callback) {
         var user = new User(data);
         user.save(function (err) {
             if (err) return callback(err);
    
            return callback(null, user);
         });
     };
    

在第一个中,我可以像这样创建一个新用户:

UserModel.create({name: 'test'}, function (err, user) {
    if (err) {// do something}
});

在第二个中,我可以创建一个新的类似:

var userProvider= new UserProvider();
userProvider.create({name: 'test'}, function (err, user) {
     if (err) {// do something} 
});

虽然这些方法看起来很相似,但我觉得我需要选择在未来不会破坏 Mongoose API。

请告诉我哪种方法更适合猫鼬模型?

【问题讨论】:

  • 个人比较喜欢第一种用法
  • 是的,我也是。但是如果 Mongeese 将来会有一个“创建”方法会发生什么?
  • 我认为无论如何,您都需要让您的代码与 Mongeese 的每个版本保持同步。

标签: node.js mongodb mongoose node-mongodb-native


【解决方案1】:

Mongoose 模型具有原生的 createupdatefind 方法,因此如果您尝试添加这些方法,方法一已经破坏了 Mongoose。

您可以使用方法二(这让我感觉很乱),但使用现有的 Mongoose 方法作为您的提供者 API 模式并添加您需要的那些不是通过静态函数本机提供的方法可能更简洁。要么添加您自己的完整方法集,其名称使用唯一前缀(例如my_createmy_update 等)。

但请确保您清楚为什么要添加抽象层,因为增加的间接性和复杂性并不是免费的。

【讨论】:

  • 也许我需要切换到 node-mongodb-native?你有为 node-mongodb-native 制作 Provider API 的例子吗?
  • @Erik 您特别希望通过您的 Provider API 抽象实现什么目标?模拟数据库的能力?数据库供应商独立性?还有什么?
  • 我需要继承,最好的性能,我想知道我的模型发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2020-06-29
  • 2018-08-03
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多