Node.js - 从域模型中抽象出猫鼬模型

gez*_*ace 7 javascript domain-driven-design mongoose mongodb node.js

我正在 node.js 中构建一个 rest API。我遵循一般的 ddd 架构,即存储库、域模型、实体、值对象等。我选择 montodb 来满足我的持久性需求,并使用 mongoose 与 dB 引擎进行交互。

在 mongoose 中,我们从定义的模式创建模型。我想弄清楚如何将我的域模型与猫鼬模型分开。我想实现值对象,但我不知道如何使用猫鼬模型来做到这一点。

我无法在任何地方找到有关如何执行此操作的任何信息。我想知道是否我会建议。我可以向猫鼬模型添加方法,所以我猜它充当了域模型。如果是这种情况,那么我如何实现值对象?

Con*_*enu 6

Mongoose 模型不是纯粹的(它们依赖于基础设施和一些方法 - 例如save- 具有副作用)。我认为使用这个库不可能拥有 100% 纯 DDD 架构。

\n\n

另一方面,使用纯 JavaScript 对象作为模型(实体、聚合和值对象)并具有 MongoDB 持久性是非常有意义的。它们之间有100%的阻抗匹配。

\n\n

这是MongoDB Javascript 驱动程序的附加内容

\n\n

Mongo DB 数据类型

\n\n

所以在使用 Mongo DB 时需要记住一件重要的事情,那就是轻微Mongo DB 支持的类型和原生 JavaScript 数据类型之间的让\xe2\x80\x99s 看一下开箱即用的支持类型,然后驱动程序如何提升类型以尽可能接近本机 JavaScript 类型。

\n\n
    \n
  • float是8字节,可以直接转换为Javascript类型Number

  • \n
  • Double 类是表示浮点值的特殊类,这在使用需要确保值始终为浮点的上限集合时特别有用。

  • \n
  • 整数有点棘手,因为 Javascript 将所有数字表示为 64 位浮点数,这意味着最大整数值是 53 位。Mongo 有两种整数类型,32 位和 64 位。如果可以的话,驱动程序将尝试将该值调整为 32 位,如果必须的话,将其提升为 64 位。同样,如果可以的话,它会反序列化并尝试将其装入 53 位。如果不能,它将返回一个 Long 实例以避免丢失精度。

  • \n
  • Long 类是一个特殊的类,可让您存储 64 位整数,也可让您对 64 位整数进行操作。

  • \n
  • 日期直接映射到 Javascript 日期

  • \n
  • RegExp直接映射到 Javascript RegExp

  • \n
  • 字符串直接映射到 Javascript 字符串(以 utf8 编码)

  • \n
  • Binary 类是一个特殊的类,可让您在 Mongo DB 中存储数据\nCode 类是一个特殊的类,可让您在 Mongo DB 中存储 javascript 函数,还可以提供一个范围来运行该方法

  • \n
  • ObjectID 类 一个特殊的类,保存 MongoDB 文档标识符(相当于主键)

  • \n
  • DbRef 类是一个特殊的类,可让您在文档中包含指向另一个对象的引用

  • \n
  • Symbol 类是一个特殊的类,可让您指定符号,与 JavaScript 无关,但与支持符号概念的语言相关。

  • \n
\n