【发布时间】:2022-01-13 10:18:06
【问题描述】:
我正在尝试创建一个简单的博客平台,同时了解有关 DDD 和微服务的更多信息,所以我想请教您在这方面的两个建议:
- 我在项目中假设的一个业务规则是,只有角色
Publicist和Administrator的用户才能创建帖子,但Publicist创建的帖子必须先得到Administrator的批准才能发布公开。据我了解,这是Posts.Domain的一部分,因此在Post聚合(同时也是实体)中,我将更改帖子的状态封装为SetPublishedStatusBy之类的方法,该方法将User(请求者)数据作为参数并评估上述规则(+ 创建域事件)。但是现在我怀疑有关请求者的信息是否真的是Posts.Domain的一部分。也许应该在不同的地方评估请求者,例如Posts.API或其他一些服务,然后在完成后调用SetPublishedStatus而不使用参数? - 让我们坚持上面的内容。尽管有
Posts微服务,我还在开发独立的Users微服务,负责存储用户并为Administrator提供一些工具来管理它们。当用户想要发布新帖子时,正确的数据流是什么?我会通过以下方式来想象:
- 客户端向网关发送
PublishPost命令和 post ID - 网关通过 HTTP 请求对用户进行身份验证(可能通过带有 JWT 的 cookie 完成)
- 网关向
Posts微服务发送PublishPost命令 -
Posts微服务调用Users微服务从DB获取相关用户数据 -
Posts微服务按 ID 从 DB 检索帖子 - 所有业务规则都通过
Posts.Domain进行评估,状态更改为Public -
如果一切正常,
Posts微服务会更新数据库并通知网关发送SuccessHTTP 响应
【问题讨论】:
标签: design-patterns architecture microservices domain-driven-design domain-model