【发布时间】:2019-03-21 04:16:18
【问题描述】:
我有遵循Onion Architecture 的.NET 解决方案。
根据这种架构的指导方针,我的实体所在的Core 层必须是抽象的,并且不引用任何外部库。
我还想连接到MongoDb 数据库,该数据库要求实体的Id 属性应为ObjectId 类型,即Mongo 类型。
namespace MyApp.Core.Entities.Base
{
using System;
**using MongoDB.Bson;** // This is an external library that should not be referenced by Core
public class BaseEntity
{
public **ObjectId** Id { get; set; }
public DateTime? CreationDate { get; set; }
}
}
因此,如果我将此属性类型添加到核心层中的实体,这意味着我将不得不在核心层中引用 MongoDb,这将违反 Onion 架构指南。我想我的解决方案是在核心层之外创建某种部分类(这是不可能的),我将在其中添加我的 ObjectId 属性。
知道我该如何做到这一点吗?
【问题讨论】:
-
"我还想连接一个 MongoDb 数据库,它要求实体的 Id 属性应该是 ObjectId 类型,它是 Mongo 类型。"那么数据库适配器类不是核心元素。否则,您将无法无视那一次的规则。我个人更喜欢前者。养成制作专门的数据库交互类的习惯。使它们成为您传递的单个实例。这样切换到 anotehr 后端 DBMS 很容易。
-
数据库适配器不是核心元素,它实际上是在基础设施层。但它将使用来自核心层的实体。
标签: c# mongodb oop n-tier-architecture onion-architecture