首页 > 解决方案 > 在一个 Model DDD .NET Core 中映射两个聚合

问题描述

我是领域驱动设计主题的新手,并且使用 .NET Core 和 Angular 7 创建了一个应用程序。

我有这种情况:

我有一个包含实体和聚合的域层,我有两个聚合:发布、评论

它们中的每一个都有自己的 Repository 和自己的 Model,并将分别保存在数据库中 Infrastructure 层的两个表中。

当我想在前端显示帖子时,我现在遇到了问题。我不想发送两个请求来获取帖子和评论。相反,我想在一个请求中同时获得它们,这意味着我的聚合应该相互连接,或者我应该创建新的聚合并在其中映射两个模型。

最好的做法是什么?我应该创建一个新模型,例如,PublicPost 并在其中映射两个对象吗?有没有办法使用 DI 和 AutoMapper 动态地实现这一点?谢谢

标签: asp.net-coreentitydomain-driven-designaggregate

解决方案


您似乎只是在从每个实体中创建一个“聚合”。这不是它应该如何工作的。您的聚合是域模型。其他相关实体只能通过该聚合访问和使用。

在这种情况下。你的总量是Post. Comment不是聚合。它属于聚合Post,因此是Post聚合的一部分。换句话说,在你的Post模型上,你应该有这样的方法:AddCommentUpdateCommentDeleteComment,并且你会公开一个Comments只读的列表属性来获取所有的评论。

即使Comment它本身就是一个聚合(即它可以完全独立存在,而不与其他任何东西相关联),那么您将进入有界上下文的领域。Comment聚合与 a 上下文中的“评论”不同(Post即使它们最终归结为相同的实体类型。您需要一个域Post是聚合并Comment通过该域进行管理,而另一个域是完全独立的域Comment本身就是一个聚合,与 完全无关Post


推荐阅读