1.3.1 领域驱动设计与单体应用
很多读者可能会问:在开发系统时使用的是单体架构,而在单体应用中是否可以使用DDD呢?当然可以。在单体应用中,组织业务逻辑时,仍然推荐使用DDD的设计思想和方法。
所谓单体系统,简单来说,就是将一个系统所涉及的各个组件打包为一个一体化结构并进行部署和运行。在Java领域中,这种一体化结构很多时候表现为一个JAR包,而部署和运行的环境就是以Tomcat为代表的各种应用服务器。这就意味着在每个单体系统中,我们至少可以实现一个包含所有领域模型、领域服务、领域事件、资源库和应用服务的限界上下文,如图1-40所示。

图1-40 单体系统中的单个限界上下文
在图1-40的基础上,我们可以采用业务模块(Module)的方式对单体系统进行拆分,这样得到的一个个模块就是限界上下文。图1-41展示了这种拆分效果。
图1-41体现了一种逻辑拆分的设计思想,即所有的代码虽然仍位于同一个JVM物理进程中,但逻辑上这些代码是严格按照DDD的方式进行拆分后的产物。基于这种方式,如果需要将单体系统升级为微服务架构,只需将各个业务模块提取为独立的微服务。

图1-41 单体系统中基于模块拆分限界上下文