DDD微服务

时间:2019-01-18 11:46:49

标签: design-patterns architecture domain-driven-design

几周前我一直在研究DDD模式,但没有任何问题的答案。

按照Eric Evans的原则,Domain模块不应与其他模块,程序包或任何东西具有依赖性。这里应该包括所有模型,例如错误,实体,接口...

我的问题是,例如,如果所有微服务之间共享一个错误模板,是否应该在每个微服务上重复相同的对象?

我认为这为项目提供了很棒的模块化,因为它没有外部依赖性,但是可伸缩性很差,因为在进行任何更改时都必须更改每个微服务。

您对此有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:4)

该准则存在于:

  1. 您的域不依赖共享库。这会阻止一个域的开发(和更改),因为这会破坏另一个域的行为。
  2. 帮助我们确保不跨域复制业务行为。这非常重要。
  3. 您的域不依赖于基础架构。我非常怀疑,这在人们过去将域逻辑放入存储过程中时显得尤为重要,但由于它确保逻辑与存储库,存储等独立且独立,因此在今天仍然非常重要。容易测试。

考虑到上述情况,可以理解 some 共享是可以的。确实,您已经在共享一些东西:基本语言结构和基类库。共享一些帮助程序库绝对是一件好事,实际上在某些情况下,这样做很有帮助。不过您应该非常小心:

  1. 以共享帮助程序库的形式共享业务逻辑违反了上面的第一条规则,因为随着我们对域的理解的变化,业务逻辑会发生变化。
  2. 共享特定于域的数据结构违反了上面的第一条规则和第二条规则。特定于域的数据结构可能会更改,因为我们对域的理解有所变化,并且依赖于它们的多个域将阻碍此过程。它也违反了第二条规则,因为特定于域的数据结构隐式地带有行为。

具体取决于您的情况,它实际上取决于什么是错误模板:

  • 它是否类似于某些确保异常包含一些基本信息的数据结构,这些基本信息可用于调试并且不包含任何特定于域的数据结构?如果是这样,那可能很好。
  • 它是否接受特定于域的数据结构?那我就说不好
  • 它是否包含任何特定于域的行为来解释某些特定于域的数据并填充模板?再没有。