asp.net-core - 在一个 Model DDD .NET Core 中映射两个聚合
问题描述
我是领域驱动设计主题的新手,并且使用 .NET Core 和 Angular 7 创建了一个应用程序。
我有这种情况:
我有一个包含实体和聚合的域层,我有两个聚合:发布、评论
它们中的每一个都有自己的 Repository 和自己的 Model,并将分别保存在数据库中 Infrastructure 层的两个表中。
当我想在前端显示帖子时,我现在遇到了问题。我不想发送两个请求来获取帖子和评论。相反,我想在一个请求中同时获得它们,这意味着我的聚合应该相互连接,或者我应该创建新的聚合并在其中映射两个模型。
最好的做法是什么?我应该创建一个新模型,例如,PublicPost 并在其中映射两个对象吗?有没有办法使用 DI 和 AutoMapper 动态地实现这一点?谢谢
解决方案
您似乎只是在从每个实体中创建一个“聚合”。这不是它应该如何工作的。您的聚合是域模型。其他相关实体只能通过该聚合访问和使用。
在这种情况下。你的总量是Post
. Comment
不是聚合。它属于聚合Post
,因此是Post
聚合的一部分。换句话说,在你的Post
模型上,你应该有这样的方法:AddComment
、UpdateComment
、DeleteComment
,并且你会公开一个Comments
只读的列表属性来获取所有的评论。
即使Comment
它本身就是一个聚合(即它可以完全独立存在,而不与其他任何东西相关联),那么您将进入有界上下文的领域。Comment
聚合与 a 上下文中的“评论”不同(Post
即使它们最终归结为相同的实体类型。您需要一个域Post
是聚合并Comment
通过该域进行管理,而另一个域是完全独立的域Comment
本身就是一个聚合,与 完全无关Post
。
推荐阅读
- java - 当数据中心中的所有联系点在 cassandra 中发生故障时会发生什么
- android - 在 Kotlin 中使用星形投影作为超类型
- google-cloud-run - 容器无法启动。无法启动并监听 PORT 环境变量定义的端口
- file-io - 我们什么时候应该使用 Infile 语句
- java - 如何对所有远程 git 分支应用一些更改
- php - Laravel,验证 alpha_dash 防止破折号
- node.js - 定时消息发送到特定频道
- shell - 使用终端读取文件行并执行 Web 操作并将输出存储为单独的文件
- c# - 如何从一个表中获取所有记录并基于该记录获取与 mvc 5 中的第一个表记录关联的所有记录
- javascript - 单击按钮时输出特定的 JSON