繁体   English   中英

使用Mongoose和Express.js进行MVC的OOP

[英]OOP with MVC using Mongoose & Express.js

我正在创建一个Express.js应用程序,我想在其中使用MVC模式和Mongoose将文档映射到MongoDB数据库。 我已经为模型创建了一个文件夹,我希望从(Javascript的版本)抽象类派生出更好的代码组织。

我很困惑组织抽象类的最佳方法是什么,并设置每个模型实例应该是的默认值。 例如,一种方法是将Mongoose Schema用于抽象类,然后将Mongoose模型用于模型本身:

Feline.js:

var mongoose = require('mongoose');

var Feline = mongoose.Schema({
  size: 'Number'
});

Feline.methods.getSize = function () {
  return this.size;
}

module.exports = Feline;

HouseCat.js:

var mongoose = require('mongoose')
, FelineSchema = require('./Feline.js');

var HouseCatModel = mongoose.model('HouseCat', FelineSchema)
, HouseCat = new HouseCatModel({
  size: 1 //Domesticated cats are small
});

module.exports = HouseCat;

这种设计存在一些问题。 首先,我认为必须有一种更好的方法来为每个模型设置特定属性,而无需在每次客户端想要创建模型类型的新实例时实例化新模型对象。 另一方面,使用这种方案,必须在每个模型文件中都需要Mongoose,并且代码是定制的,以便使用mongoose,这意味着如果我们希望将来这样做,将难以切换到另一个ODM。

有没有更好的编码方式? 是否有任何设计模式很容易在Node中实现,以便轻松更改ODM?

由于猫鼬特别针对mongodb,因此抽象其行为将是一项艰巨的任务。

最简单的方法是为所有ODM设置一个接口,并使用适配器模式 ,其中mongoose是一个“适配器”。 然后,您可以使用提供一些依赖注入的模块来替换使用的ODM。

由于这是一项非常漫长的任务,我无法给你一些代码。 而且,在javascript中实现那种东西可能会很痛苦,因为它本身并不提供强大的OOP。 但是,我建议你看看一些可以帮助你做这些的框架 ,例如Danf ,它提供了一个强大的OOP范例,包括接口,类,继承和强大的依赖注入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM