DDD和EF,在不同范围内共享实体

时间:2018-10-02 15:49:33

标签: c# entity-framework domain-driven-design

一个DDD有界上下文是指一个EF DbContext,以使事情变得简单和整洁。 如何处理可以在不同范围内使用的实体? 例如,在HumanResource DbContext中定义的Person表可用于在其他上下文中进行报告和查看。 我们尝试使用参考上下文模式来解决此问题,但现在我们的类在所有DDD上下文中都代表表人,我们必须同步其所有属性。

1 个答案:

答案 0 :(得分:2)

您应该将对象模型从远程绑定上下文转换为本地绑定上下文。

不应使用HR Bounded上下文中的Person,而是在本地Bounded上下文中使用converted到一个(简单的)对象,并根据本地Bounded中的泛在语言对它进行相应命名上下文,即EmployeePayer或您拥有的任何本地域。

为此,还有更多integration technics。其中之一是反腐败层。例如,您可能有一个计划任务或cron作业,该任务会提取所有“人员”并将它们作为本地对象保存在本地缓存中;本地对象通常具有比远程对象更少的属性,并且没有更新逻辑。通常将它们实现为Value对象。

最好的集成技术是使用集成事件。每次更新Person时,远程Bounded上下文都会向所有感兴趣的Bounded上下文发布事件,这些事件会对这些事件做出反应并更新其本地缓存。

因此,换句话说,不建议直接从远程绑定上下文中引用数据库表。