我正在节点中建立一个REST API.我正在遵循通用的ddd体系结构,即存储库,域模型,实体,值对象等.
我为满足持久性需求而选择montodb,并使用mongoose与dB引擎进行交互.
在猫鼬中,我们根据定义的架构创建模型.
我试图弄清楚如何将我的域模型从猫鼬模型中分离出来.我想实现值对象,但我看不到如何用猫鼬模型做到这一点.
我找不到任何有关如何在任何地方执行此操作的信息.我想知道是否会建议这样做.我可以将方法添加到猫鼬模型中,所以我猜它正在充当域模型.如果是这种情况,那么我将如何实现值对象?
解决方法:
猫鼬模型不是纯粹的(它们依赖于基础架构,并且某些方法(例如保存)会产生副作用).我认为使用此库无法拥有100%纯DDD架构.
另一方面,将纯JavaScript对象用作具有MongoDB持久性的模型(实体,聚合和值对象)非常合理.它们之间有100%的阻抗匹配.
这是MongoDB Javascript driver的附加功能:
Mongo DB数据类型
因此,在使用Mongo DB时要牢记一件重要的事情,那就是Mongo DB支持的类型与本机JavaScript数据类型之间的细微映射差异.让我们看一下开箱即用的支持类型,然后看看驱动程序如何推广这些类型以使其尽可能接近本机JavaScript类型.
>浮点数是8字节,可以直接转换为Javascript类型Number
>将一个特殊的类Double表示一个浮点值,当使用有上限的集合时需要确保值始终是浮点的,这特别有用.
>整数有点棘手,因为Javascript将所有数字表示为64位浮点数,这意味着最大整数值为53位. Mongo有两种整数类型,分别是32位和64位.如果可能,驱动程序将尝试将该值设置为32位,如果必须,则将其提升为64位.同样,它将尝试反序列化以使其适合53位.如果不能,它将返回Long的一个实例,以避免丢失精度.
>长类是一个特殊的类,它使您可以存储64位整数,还可以对64位整数进行操作.
>日期直接映射到Javascript日期
> RegExp直接映射到Javascript RegExp
>字符串直接映射到Javascript字符串(以utf8编码)
> Binary类是一个特殊的类,可让您在Mongo DB中存储数据
代码类是一个特殊的类,可让您在Mongo DB中存储javascript函数,还可以提供一个范围来在其中运行方法
> ObjectID类是保存MongoDB文档标识符(等效于主键)的特殊类
> DbRef类是一个特殊的类,可让您在文档中包含指向另一个对象的引用
> Symbol class这是一个特殊的类,可让您指定符号,该符号与JavaScript并不真正相关,但与支持符号概念的语言有关.