【问题标题】:MongoDB: using onion architecture, does my domain/core layer need to reference the MongoDB dlls?MongoDB:使用洋葱架构,我的域/核心层是否需要引用 MongoDB dll?
【发布时间】:2012-09-24 13:52:21
【问题描述】:
MongoDB 有自己的 ObjectId 类型,它用作默认主键。我正在尝试设置一个使用 Onion Architecture 设计的应用程序,并将 MongoDB 作为基础设施层中的持久性引擎。如果我的 POCO 类是在我的域层中定义的,但使用 MongoDB 的 ObjectID 类型作为主键,这会迫使我将 MongoDB 添加为对我的域层的依赖吗?
【问题讨论】:
标签:
mongodb
onion-architecture
【解决方案1】:
除了最外层之外,您不应该在任何地方都需要对 MongoDB 的引用。在洋葱架构中,数据持久性被认为是基础设施。我希望 MongoDB 成为实现域模型中定义的存储库接口的存储库实现的一部分。
MongoDB 文档有一个 _id 字段来唯一标识它。 See here:
_id 值可以是数组以外的任何类型,只要它是唯一的。如果您的文档具有不可变的自然主键,我们建议您在 _id 中使用该主键,而不是自动生成的 id。
不要让你的持久性机制左右你!
【讨论】:
-
感谢您的帮助!事实证明,C# 驱动程序的文档解决了这个问题(link)。在标题为 RepresentationSerializationOptions 的部分(几乎在页面的一半处)下,它提到了一种使用string 作为 POCO 中的数据类型同时将值存储在 mongodb 中作为ObjectId 的方法。这个 SO 问题也有帮助:link