domain-driven-design - 在微服务中,是否可以接受 API 返回已复制的聚合根?
问题描述
想象一下,我们有一个微服务 M1,其聚合根称为Player
,微服务 M2 其聚合根称为Classification
Classification
- 通过异步消息将可能的分类列表复制到 M1;
- 做M1中业务要求的事情;
好的,现在假设我们有一个添加 Players 的视图,并且在该视图中可以从下拉列表中选择Classification
新的。Player
现在的问题:
下拉列表应该填充复制到 M1 还是从 M2 的分类?
如您所见,通过使用来自 M1 的数据,我们必须Classification
通过 API 公开来自 M1 的数据,这就是问题的标题。
编辑
复制是通过使用事件的异步消息传递发生的,因此我不会将整个聚合暴露给 M1,而只是将一些属性(如 Id 和分类的描述)暴露给 M1。
解决方案
设计微服务时的主要思想是一个微服务不应该对任何其他微服务进行任何同步调用。这意味着每个微服务都应该在响应查询或执行命令之前以异步模式收集任何所需的外部状态。一种方法是(1)订阅事件;另一种方式(2)是通过定期查询一些公开的读取模型(参见CQRS),即在cron
工作中。
在任何情况下,您都不应该暴露整个聚合,否则您可能会因依赖其内部而破坏其封装。相反,您应该发布其领域事件 (1) 或创建一个专门设计的规范 Readmodel,将最可能的模型呈现给其他微服务;类似于规范的读取模型;我会避免这种情况,除非域太简单,太 CRUD。
推荐阅读
- axapta - 列出对 Dynamics ax 2009 中给定表具有权限的所有用户
- android - 如何向谷歌表格 REST API 发出基本的 POST 请求?
- kubernetes - 我需要为 GKE 节点池配置哪些最小权限才能从同一项目中的私有 GCR 存储库中提取?
- spring - 在spring + jpa上的应用程序中数据库oracle中的行版本控制?
- python - Numpy 分区对角矩阵
- javascript - 隐藏和显示选择选项不适用于模态
- azure-ad-b2c - AAD B2C 中的 OAUTH-KV 声明解析器不起作用
- reactjs - 使用 post 方法和一些数据从外部 url 重定向到我的 reactJS 应用程序路由
- javascript - 从 json 创建列表返回 [object Object] 并且仅返回最后一个 li
- google-app-maker - 在创建后添加记录