我正在节点中构建一个rest API。我遵循一般的ddd架构,即存储库,域模型,实体,值对象等。我选择montodb来满足我的持久性需求,并使用mongoose与dB引擎进行交互。
在mongoose中,我们从定义的模式中创建模型。我试图找出如何将我的域模型与猫鼬模型分开。我想实现值对象,我不知道如何用mongoose模型做到这一点。
我无法找到任何有关如何在任何地方执行此操作的信息。我想知道是否是我会建议的。我可以为猫鼬模型添加方法,所以我猜它是一个域模型。如果是这种情况,那么我如何实现值对象?
Mongoose模型并不纯粹(它们依赖于基础设施,而某些方法 - 如save
- 有副作用)。我不认为您可以使用此库拥有100%纯DDD架构。
另一方面,使用普通JavaScript对象作为具有MongoDB持久性的模型(实体,聚合和值对象)非常有意义。它们之间有100%的阻抗匹配。
这是来自MongoDB Javascript driver的额外内容:
Mongodb数据类型
因此在使用Mongo DB时要记住一个重要的事情,那就是Mongo DB支持的类型和本机JavaScript数据类型之间的轻微映射差异。让我们看一下开箱即用的类型,然后看看驱动程序如何推广类型以尽可能接近本机JavaScript类型。