如何在 DDD 中使用 EF DbContext 分离我的聚合
How to separate my Aggregates by using EF DbContext in DDD
我有 5 个域,我需要将每个域与不同的数据库分开,那么我该如何使用 Entity Framework 进行分离。
域驱动设计对您的持久性机制没有意见,例如您如何设计或构建一个或多个数据库。所以从 DDD 的角度来看,答案是“随心所欲”!
但是,如果您想将您的域分隔到不同的数据库中(即使您不必这样做),您的选择是:
- 将您所有域中的所有内容保存在一个 DbContext 中,并将接口传递到您的 类 中,这些接口仅允许访问特定域 类,例如从 DbContext 访问订单的 IOrdersRepository 和 IInvoicesRepository仅访问来自同一 DbContext 的发票。
- 为每个域向您的应用添加多个 DbContext,例如 SalesDbContext、BillingDbContext、MarketingDbContext,并在您的 Startup.cs 文件中为每个 DbContext 提供其自己的连接字符串。
- 将您的应用拆分为更小的项目(如微服务),例如 Sales.Api 有自己的 DbContext,Billing.Api 有自己的 DbContext。
可能还有其他我没有想到的选项,因为 DDD 没有规定任何关于如何存储数据的规定。
我有 5 个域,我需要将每个域与不同的数据库分开,那么我该如何使用 Entity Framework 进行分离。
域驱动设计对您的持久性机制没有意见,例如您如何设计或构建一个或多个数据库。所以从 DDD 的角度来看,答案是“随心所欲”!
但是,如果您想将您的域分隔到不同的数据库中(即使您不必这样做),您的选择是:
- 将您所有域中的所有内容保存在一个 DbContext 中,并将接口传递到您的 类 中,这些接口仅允许访问特定域 类,例如从 DbContext 访问订单的 IOrdersRepository 和 IInvoicesRepository仅访问来自同一 DbContext 的发票。
- 为每个域向您的应用添加多个 DbContext,例如 SalesDbContext、BillingDbContext、MarketingDbContext,并在您的 Startup.cs 文件中为每个 DbContext 提供其自己的连接字符串。
- 将您的应用拆分为更小的项目(如微服务),例如 Sales.Api 有自己的 DbContext,Billing.Api 有自己的 DbContext。
可能还有其他我没有想到的选项,因为 DDD 没有规定任何关于如何存储数据的规定。