微服务 DDD CQRS

Microservices DDD CQRS

我一直在阅读 DDD 和微服务。通过使用 CQRS 部分的用例开始制作原型。用例是一款运动足球应用程序,其中包含视频、新闻、比分和主页。在此,我确定了域和限界上下文

  1. 新闻

  2. 视频

  3. 分数

  4. 首页

首先,3个域是完全独立的。

现在,主页域要求。 1.乐谱部分 2. 视频部分 3.内容部分

内容部分:它有自己的数据库

Videos部分:HTTP调用视频服务并获取数据

Score部分:HTTP调用Score服务获取数据

我的问题是关于主页域。 我发现它与其他服务高度耦合并且不是独立的。

如何设计主页域?

I find it is highly coupled with other services and it's not independent.

是的。

你可以通过仔细思考失败模式来提高独立性;当相关数据权限不可用时,UI 元素应该如何表现。例如,如果远程机构没有及时响应,您可以让主页简单地显示 "data not available" 消息。或者您可以让主页显示一些陈旧数据的缓存副本。 始终 使用缓存数据呈现响应甚至可能有意义,缓存更新在后台进行。

您可以使用一些技术来减少服务之间的耦合。
UI Composition Techniques 的 Udi Dahan 描述了一种方法。他的想法是,你用一个元素,比如widget,来封装显示逻辑和失效模式。

底层机制并没有什么不同;当数据不可用时,小部件会遇到我们之前遇到的所有相同问题。但它所做的是将属于不同团队的两个问题(当小部件不可用时你做什么,当数据不可用时你做什么)分开:主页团队决定做什么当小部件不可用时(可能使用了缓存副本),服务团队将决定在小部件无法访问支持数据时要做什么(可能小部件有自己的陈旧数据缓存)。

没有魔法;你有一个分布式系统,其结果是你需要在你的设计中考虑远程进程并不总是可用的事实。