边界是核心
无论是从宏观到微观再到纳米层次,还是从战略设计推进到战术设计,领域驱动设计一直强调的核心思想,就是对边界的划分与控制。
从分析需求一开始,我们就需要通过确定项目的愿景与目标,划定问题空间,由此确定核心子领域、通用子领域与支撑子领域。这是领域驱动设计的第一重边界。它帮助团队看清主次,理清了问题域中领域逻辑的优先级,同时促使团队在宏观层次的全局分析阶段能够将设计的注意力放在领域和对领域模型的理解上,满足领域驱动设计的要求。
进入解决方案空间,战略设计获得的限界上下文成为了领域驱动设计的第二重边界。通过它可以有效地降低系统规模,无论是在业务领域,还是架构设计,或者团队协作方面,限界上下文建立的边界都成为了重要的约束力,边界内外可以形成两个不同的世界。暴露在限界上下文边界外部的是远程服务或应用服务,每个服务都提供了完整的业务价值,并通过相对稳定的契约来展现服务,由此确定限界上下文之间的协作方式。在限界上下文边界之内,可以根据不同的需求场景,形成自己的一套设计与实现体系。外部世界的规则是契约、通信以及系统级别的架构风格与模式,内部世界的规则是分层、协作以及类级别的设计风格与模式。
在限界上下文内部,基础设施层、应用层与领域层之间的隔离成为了领域驱动设计的第三重边界。如果以六边形架构来观察这种层与层之间的隔离,体现的仍然是一种内外隔离,应用层形成了一种保护层,有效地隔离了业务复杂度与技术复杂度。将领域层作为整个系统稳定而内聚的核心,是领域驱动设计的关键特征。唯有如此,才能逐渐将这个“领域内核”演化为企业的重要资产。这也是软件设计的核心思想,即分离变与不变