如何权衡设计可扩展的有界上下文? (mathiasverraes)


有界上下文本身大小与有界上下文之间集成接口是一种很复杂的权衡设计,本文指出了其中存在的矛盾和张力。
术语定义:

  • 有界上下文是“可理解性边界”,即模型及其语言周围的边界。您可以孤立地理解模型和语言,而不必了解其他边界上下文。
  • 接口是有界上下文之间的一组合同或消息类型或API。它们从一种模型和语言转换为另一种模型和语言。
  • 如果我们能够对其进行频繁,安全和廉价的更改,则有界上下文或接口是可以发展的。

在设计可扩展的有界上下文(BC)时,存在一些基本的权衡会影响我们的设计。
  1. 如果BC小且易于理解且接口较小,则它在内部是可演化的。
  2. 如果接口较小且易于理解,则BC系统是可演化的(添加,删除,重新配置BC)。
  3. 1和2之间权衡的压力在于:选择许多小的BC意味着具有更大的接口,但是选择许多小的接口意味着具有更大的BC。
  4. 如果接口集成的BC较少,则接口本身将更易于演化;如果集成更多的BC,则接口本身将难以演化。
  5. 2和4的结果是,小的可扩展接口使添加BC更容易,但在此过程中可扩展性降低。
  6. 与每个消费者的许多专用接口相比,BC提供一个通用的共享接口要容易得多。但是,当BC更改时,很难维护许多专用接口。
  7. 对于BC而言,使用适合该BC的专用接口更加容易。通用接口之所以膨胀,是因为它们支持其他使用者,因此需要进行更多的集成工作。
  8. 权衡6和7需要找到一小组半专业接口,这些接口在具有类似需求的某些消费者之间共享。
  9. 团队之间的协调(实际上是理解,协调模型和语言的协调)非常昂贵,这是我们拥有BC的原因之一。
  10. 实现8.与单个通用接口或单个专用接口相比,需要在更多团队之间进行更多的协调。

没有解决方案或硬性规定来进行这些折衷。取而代之的是,您需要使用启发式方法进行权衡,并使用启发式方法来知道何时选择与您最初进行的取舍不同的取舍。