architecture - 领域驱动设计共享实体

标签 architecture domain-driven-design entity-relationship bounded-contexts

我刚刚开始我的领域驱动设计职业之旅。我的类(class)模型有问题。下面是一个简化的类图。

enter image description here

我有两个有界上下文:人口问题

Person 是使用至少一个文档创建的。 Person 可以报告附加多个 IssueAttachment 的新 Issue

我希望将文件存储集中为单个 File 实体,并将其保留在单个数据库表中。中心化的原因是在持久化之前执行常见操作,例如数据压缩或获取 md5 哈希。此外,将所有文件存储在单个表中还简化了测试数据转储过程,因为我必须忽略单个表来排除大量 blob。

但是,在阅读了很多文章之后,我可以得出结论,不建议在不同上下文之间共享实体。

您能给我一些关于如何处理此类问题的设计建议吗?

最佳答案

如果您已经确定了两个有界上下文,那就太好了。请引用下图从俯 View 来理解。 enter image description here

现在,如果我们查看每个有界上下文。在本例中,以洋葱架构为例,如图 2 所示。 (您可以选择适合您需要的任何架构)。 enter image description here

是的,你没有听错。确实,两个不同的有界上下文中的模型是不同的。目前您可能会看到具有相同属性的同一类。 但由于它们处于不同的有界上下文中,因此它们对业务具有不同的含义。一旦您填补了基础设施与域之间的空白,就可以尝试按照以下描述的方式进行思考。也许你会看到不同的含义。

但是,就您而言,您对共享相同基础设施(例如:文件系统)的担忧可以在有界上下文的最外层处理,而不必担心或与您的域业务混合。

从图 2 中可以看出,使用位于 shell 最外层的基础层与共享基础设施(例如:文件系统)进行交互。现在,在域(分别是人口或问题上下文)中定义一个接口(interface),该接口(interface)定义了各自的业务需求。您可以在应用程序层中实现它,您可以在应用程序层中与您的基础层(相同的有界上下文)进行交互。反过来,您将能够与共享基础设施(文件系统)进行通信。

明天您将使用哪种基础设施,以及基础设施发生什么变化,您的域名业务都不会受到影响。因此,通过这种方式,您可以保持事物隔离。在基础层中,只需很少的更改并拥有某种映射器或适配器,您将能够与共享基础设施(文件系统)进行神奇的交互。

让我知道你的想法。

关于architecture - 领域驱动设计共享实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62758995/

相关文章:

java - 仅用于审计目的的 ER 建模字符串对象列表

jpa - 有没有办法从EntityManager获取所有托管实体

c# - 建议简化我的体系结构... asp.net mvc

c++ - OpenGL和OOP程序结构

java - 如何最好地在 XML 中实现 HATEOAS 的链接关系?

c# - 领域驱动设计和横切关注点接口(interface)定义

c# - 与 Entity Framework 的多个一对多关系

java - 用户详细信息存储最佳实践

architecture - 用于 AKKA Actor 框架?

oop - 使用 DDD 建模时间表