能显示业务目标的DDD微服务架构图 -Aleix


从我职业生涯的一开始,我就一直在分析和绘制架构图。
他们中的大多数人关注正在使用的技术以及它们如何相互通信。他们中很少有共同的商业目的。
您有多少次需要在查看图表时与某人交谈以询问该服务的作用?那一个呢?
在这篇文章中,我分享了一个显示元素业务目的的架构图。

在下图中,我展示了您今天在公司中可能拥有的合理图表。
我敢肯定,您将拥有更多人类可读的名称,而不是将名称作为服务 A的框,而且,如果您足够幸运,这些名称将是与业务相关的名称,例如用户、账单、帐户,信用卡,……

看着这张图,你能说:

  • 哪个服务是核心的,哪个是支持性的?
  • 每项服务是什么?
  • 为什么他们需要互相交谈?
  • 它们是同步的还是异步的?
  • 您需要了解每项服务之间使用的每项技术。

这张图着重于两件事:

  • 信息流。
  • 支持信息流的技术。

为什么我们将重点放在正在使用的技术上,而不是放在它们解决什么问题上?

让我们从为服务添加意义开始,这样才能表达其能解决什么问题
领域驱动设计分享了我们拥有三种类型的领域:

  • 核心领域:这是你在一个单一的、定义良好的领域模型上进行战略投资的地方,投入大量资源在明确的限界上下文中精心打造你的通用语言。
  • 支持子域:这种建模情况需要定制开发,因为不存在现成的解决方案。
  • 通用子域:这种解决方案可能是现成的。你不想在这里进行那种投资。

在图中注意到每个服务的域类型不是很酷吗?

突然之间,我们可以看到哪些服务比其他服务更重要。这可能比其他人发展得更快。
但是他们做什么呢?他们的用例是什么?他们为什么互相调用?
我们需要有足够的信息来了解他们的用例。

当我查看图表时,我想知道:

  • 哪些是主要实体。
  • 哪些是主要用例。
  • 服务如何与它们交互。同步或异步。
  • 它们发出哪些事件,哪些服务监听它们。

要将此信息添加到图中,我们可以使用 4 个主要框:
  • API/入口点。
  • 用例。
  • 实体。
  • 事件。

他们如何沟通可以用实线(同步调用)或虚线(异步所有)箭头标记。


让我们看看我们的图表如何根据这些信息发展。


现在,我们可以查看图表并了解每个服务的职责和业务目的。
这是我使用的 excalidraw。

  • 该图需要显示高级概述。
  • 如果我们有太多的信息,它就会由于信息溢出而失去目的。

  • 我知道这张图不适合色盲。请在图表中添加注释,以便对您的同事更具包容性。