正如我之前提到的,限界上下文的物理实现和逻辑实现是分离。下面有几种物理隔离类型,它们都有各自的优劣势。

类型1

  • 同一jar包
  • 共享数据库实例

image.png
第一种是同一jar,不同限界上下文划分为不同的包。也就是不同限界上下文创建不同文件夹。这种方式意味着数据库是同一实例,不同限界上下文对应不同的数据库表。

类型2

  • 不同jar

image.png
第二种方式是将限界上下文划分至不同的项目。

类型3

  • 单独部署
  • 允许在不同进程
  • 微服务

第三种方式是单独部署,前面两种是允许在同一物理进程中,这种方式通常和微服务一起使用。
类型1->类型2->类型3

  • 隔离性高
  • 维护开销上升

随着隔离性提高,维护代价也将随之上升。那么我们如何选择呢?

  • 从类型1开始
  • 在必要的情况下向上扩展

我们的例子是使用类型1的,随着代码的增长,后期会扩展至类型2,甚至类型3。重构文件结构:
image.png
👆atm文件全为空。common文件中的类是可以被任意限界上下文使用的,后续章节将介绍限界上下文之间共享代码。