簡體   English   中英

Node.js - 從域模型中提取貓鼬模型

[英]Node.js - Abstracting mongoose model from domain model

我正在節點中構建一個rest API。 我遵循一般的ddd架構,即存儲庫,域模型,實體,值對象等。我選擇montodb來滿足我的持久性需求,並使用mongoose與dB引擎進行交互。

在mongoose中,我們從定義的模式中創建模型。 我試圖找出如何將我的域模型與貓鼬模型分開。 我想實現值對象,我不知道如何用mongoose模型做到這一點。

我無法找到任何有關如何在任何地方執行此操作的信息。 我想知道是否是我會建議的。 我可以為貓鼬模型添加方法,所以我猜它是一個域模型。 如果是這種情況,那么我如何實現值對象?

Mongoose模型並不純粹(它們依賴於基礎設施,而某些方法 - 如save - 有副作用)。 我不認為您可以使用此庫擁有100%純DDD架構。

另一方面,使用普通JavaScript對象作為具有MongoDB持久性的模型(實體,聚合和值對象)非常有意義。 它們之間有100%的阻抗匹配。

以下是MongoDB Javascript驅動程序的附加內容:

Mongo DB數據類型

因此在使用Mongo DB時要記住一個重要的事情,那就是Mongo DB支持的類型和本機JavaScript數據類型之間的輕微映射差異。 讓我們看一下開箱即用的類型,然后看看驅動程序如何提升類型以盡可能接近本機JavaScript類型。

  • Float是一個8字節, 可直接轉換為Javascript類型Number

  • Double類是一個表示浮點值的特殊類,在使用上限集合時尤其有用,您需要確保值始終為浮點值。

  • 整數有點棘手,因為Javascript將所有數字表示為64位浮點數,這意味着最大整數值為53位。 Mongo有兩種類型的整數,32位和64位。 如果可以,驅動程序將嘗試將值擬合為32位,如果必須,則將其提升為64位。 類似地,如果可以,它將反序列化嘗試將其擬合為53位。 如果它不能,它將返回Long的實例,以避免失去精度。

  • Long class是一個特殊的類,它允許您存儲64位整數,還允許您操作64位整數。

  • 日期直接映射到Javascript日期

  • RegExp 直接映射到Javascript RegExp

  • 字符串直接映射到Javascript字符串(以utf8編碼)

  • 二進制類是一個特殊的類,它允許你在Mongo DB Code類中存儲一個特殊的類,它允許你在Mongo DB中存儲javascript函數,也可以提供一個運行方法的范圍

  • ObjectID類是一個包含MongoDB文檔標識符的特殊類(相當於主鍵)

  • DbRef類是一個特殊的類,它允許您在指向另一個對象的文檔中包含引用

  • Symbol類是一個特殊的類,它允許您指定符號,與JavaScript無關,但對於支持符號概念的語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM