我是MongoEngine的新手,看起来我们需要从mongoengine
创建类Document
的子类来建模数据库。我有点担心,因为这违反了SOLID原则中的依赖倒置。因此,如果我以后需要使用另一个数据库,我将不得不更改我的域模型类,而我实际上不应该这样做
SQLAlchemy通过提供一个漂亮的classical mapping来克服这个问题。使用这种方法,依赖于数据库的代码从我的域模型中分离出来,因此我真的不需要担心数据库提供程序,如果需要更改数据库,我可以轻松地将细节提取出来
对于MongoDB,尤其是在MongoEngine中,是否有类似的功能
Pymongo的官方doc提供了现有ORM/ODM和框架的列表,但据我所知,它们都实现了Active Record Pattern(就像django ORM),正如您所说,它违反了坚实的原则,但对于许多简单的用例来说已经足够好了
MongoAlchemy的灵感来源于SQLAlchemy,它使用了session的概念,因此它可能更接近您所寻找的内容,但该项目不再维护
如果我理解正确,您正在尝试使用mongoengine将对象映射到文档模式
让我们为用户创建一个文档类:
现在添加一个创建新用户的类方法:
我理解您的问题,本例中您的问题是UserDocument可能知道mongoengine,因此违反了依赖倒置原则。这可以通过一个子类来解决
首先允许在UserDocument中继承:
接下来,我们构建孩子:
接下来添加一个create方法:
现在,我们的用户对象继承了UserDocument字段。可以直接或通过User.new()的子级访问UserDocument.new
用户对象知道UserDocument,而UserDocument又依赖于mongoengine
如果我误解或使用了不正确的词汇来描述示例解决方案,我深表歉意。我比较新,自学成才,没有朋友编写代码,这使得讨论变得困难
相关问题 更多 >
编程相关推荐