课程介绍
本次交流重点在于讲解领域驱动设计的方法体系,并将领域驱动设计与业务分析与建模技术结合起来,通过领域模型正确反映业务需求,以便于领域专家与业务分析人员、开发团队就业务需求达成共识,促进对业务需求的理解,并建立面向领域的架构体系以快速响应需求变化。
第一部分 领域驱动设计体系
以高屋建瓴的方式概括讲解整个领域驱动设计体系,内容包括:
经典领域驱动设计体系
软件系统复杂度剖析
领域驱动设计统一过程
讲解由Eric Evans提出的经典领域驱动设计,对整套方法体系和过程有一个完整的理解,然后,剖析软件系统的复杂度,明确复杂度的产生在于软件系统的规模与业务需求的变化,由此形成业务复杂度与技术复杂度。而领域驱动设计通过限界上下文与领域建模可以在一定程度降低业务复杂度,响应业务需求的变化,并通过隔离业务复杂度与技术复杂度整体降低软件复杂度。
针对领域驱动设计存在的不足,提出领域驱动设计统一过程,包括需求分析、架构设计与领域建模等内容,并在领域驱动设计的指导原则下进行。
案例分析:
某航空公司地面保障系统的架构设计
案例分析首先将根据复杂度分析,对整个系统的问题空间进行剖析,明确复杂度的成因,然后根据企业架构思想,梳理业务架构、应用架构、数据架构与技术架构之间的关系,推导出降低和控制系统复杂度的办法。
第二部分 全景分析阶段
对整个项目进行业务的全局分析,内容包括:
全局分析的5W模型
价值需求分析
业务需求分析
全局分析阶段会梳理目标系统的价值需求和业务需求,利用5W模型梳理目标系统的利益相关人、系统愿景和范围,获得价值需求,并在价值需求的指导下,梳理参与者、目标系统与伴生系统之间的协作关系,获得业务流程,再结合业务流程的三要素“角色、场景与时间”切分业务场景与业务活动。
在进行价值需求分析与业务需求分析中,需要用到需求分析的方法,包括:
商业模式画布
服务蓝图
用例分析方法
工作坊:
技术部落的需求分析:分析如何运用商业模式画布探索需求,分析如何运用服务蓝图提炼业务流程,根据用例获得业务需求
案例分析:
银行批量代收和代付业务的用例分析:根据批量代收和代付业务流程,针对批量代收(付款行)收报处理的用例进行分析
第三部分 架构映射阶段
在领域驱动的战略设计阶段,以领域为核心驱动力,以限界上下文为核心模式构建面向领域的架构体系,内容包括:
限界上下文
上下文映射
领域驱动架构
通过全局分析阶段输出的业务场景与业务活动,利用V模型从领域维度识别限界上下文。限界上下文作为业务能力的纵向切分、领域模型的知识语境,是响应业务变化的关键架构因素。由限界上下文之间的协作形成上下文映射,并根据领域驱动设计原则,建立面向领域的架构体系,形成以菱形对称架构与分层架构为支撑的领域驱动架构。
工作坊:
技术部落的架构映射:根据全局分析输出的业务需求对技术部落进行架构映射,识别出系统的限界上下文,确定限界上下文之间的关系。
第四部分:风险驱动设计
风险驱动模型主要关注软件系统的质量属性,通过识别风险来逐步驱动软件架构设计,它强调进行恰如其分的架构设计:
风险驱动设计的过程:风险驱动设计的过程分为三个步骤,即识别风险,并对风险排定优先级;选择和运用适当的软件技术来降低风险;评估风险是否得到降低。
风险评估模型:评估风险并非只是架构师的职责,而应该是整个团队包括客户共同参与的结果。本部分将引入可视化的RAID分析方法,引导团队搭建软件系统的风险评估模型。
约束对架构的驱动:除了风险之外,我们也可以通过识别一些架构约束(约束的识别是通过与客户的充分沟通,从质量属性的角度来分析),并将其作为一种驱动力来逐步改进或者调整架构。技术债务也可以看做是另一种设计约束,我们需要随时更新整个项目的技术债务,并制定相应的计划去解决这些技术债务,从而进一步优化软件系统的整体架构。
工作坊:
技术部落的风险识别:运用RAID方法识别出技术部落的风险、假设、问题与依赖,确定技术部落的技术架构
第五部分 领域建模阶段
以领域场景为建模核心开展领域模型驱动设计,是保证领域驱动设计落地的重要条件,内容包括:
领域分析建模
领域设计建模
领域实现建模
在限界上下文的知识边界内分析领域逻辑,提炼领域概念,在统一语言的指导下迭代地进行领域建模,包括建立清晰表达了领域概念的领域分析模型,与以聚合为核心要素的领域设计模型,通过场景驱动设计确定每个领域模型对象的职责,并顺利地引导到领域实现建模,以测试驱动开发的流程编写领域实现代码与测试代码。在进行领域建模时,会使用到如下可视化建模方法:
四色建模
场景驱动设计
案例分析:
银行批量代收和代付业务的领域建模:利用用例分析的成果,通过运用四色建模获得领域分析模型,并在限界上下文的控制下识别聚合,然后按照场景驱动设计获得领域设计模型。
第六部分:微服务与领域驱动设计
微服务的设计至关重要,我们需要考虑微服务的粒度,服务的边界,服务之间的通信等。倘若服务的设计不合理,就可能导致不必要的代码重复、不必要的耦合,甚至影响到整个系统的部署、性能等。目前,业界基本达成一个共识,就是利用领域驱动设计的知识,特别是通过限界上下文来设计微服务。
若将限界上下文作为通信边界,则限界上下文即可作为微服务的边界,以限界上下文为核心的领域驱动架构即可以映射为微服务架构,而上下文映射则可以指导微服务之间的协作关系。本部分内容将基于领域驱动设计知识讲解微服务的架构设计,内容包括:
面向领域架构到微服务架构的映射
基于服务(REST、RPC)的微服务架构
基于事件的微服务架构
CQRS架构模式
案例分析:
国际报税系统的微服务演化:利用领域驱动设计思想,从单体架构演化到微服务架构
某航空公司地面保障系统的微服务架构:通过领域驱动设计的限界上下文识别微服务,并确定事件驱动架构风格作为微服务之间的主要通信模式,并结合该系统讲解主流微服务平台的技术选型。
第七部分 架构关注点专题
本部分主要讨论软件系统的高质量设计。高质量是软件系统设计无法绕过的话题,无论是企业架构还是互联网架构,设计时都需要考虑如何满足高质量的要求,即满足系统的可靠性、高吞吐量、低延迟、可扩展性等质量属性。本专题讨论会给出高质量设计的常见问题、解决方案与最佳实践:
高可靠性:分布式系统的高可靠性设计原则、削峰降级与熔断机制、异地多活的关键设计原理
可伸缩性:遵循AKF立方体模型,从应用、服务与数据三个维度对系统的对应层次进行分割,以满足系统的可伸缩性
高性能:通过引入异步、并发与缓存等多种机制,提高软件系统的高性能,实现客户调用请求的低延迟
数据一致性:根据BASE原则以及CAD原理实现微服务的柔性事务,包括可靠消息模式、TCC模式、和SAGA模式。
企业架构:从企业战略角度分析企业架构在金融行业软件系统中的运用
专题分析:
秒杀系统的高可靠设计
地面保障系统的双中心双活架构
外卖系统的高性能提升
支付系统的数据一致性
金融系统的企业架构