4006-998-758
3000+课程任你选择
领域驱动设计实战v1
研发学院 领域驱动设计
张逸

高质量编码实践者,领域驱动设计布道师,微服务系统架构师,大数据平台架构师,敏捷转型咨询师。热衷于编程语言学习与技艺提升,致力于将企业架构、精益需求管理、领域驱动设计与微服务架构完美结合,打造面向企业的业务中台;致力于将数据仓库、实时流处理、机器学习与高性能存储完美结合,打造面向行业的智能数据中台。

拥有近20年的软件开发与架构设计经验,曾先后就职于中兴通讯、惠普 GDCC、中软国际、ThoughtWorks 等大型中外企业,任职角色为高级软件工程师、架构师、技术总监、首席咨询师。精通包括 Java、Scala、Python、C#、JavaScript、Ruby 等多种语言,熟练掌握面向对象思想、测试驱动开发与重构、领域驱动设计、函数式编程、架构、大数据分析、敏捷与过程改进,并致力于大型软件企业的面向服务系统架构设计、大数据平台架构设计以及互联网 Web 系统架构设计,曾经连续四届荣获微软最有价值专家,具有丰富的企业软件系统和分布式开发经验。


查看老师详情
课程内容

课程背景:

领域驱动设计实战v1(图1)领域驱动设计案例实战训练营建立了完整的领域驱动设计统一过程,围绕着领域为核心驱动力,引入需求分析、架构设计与领域建模的最佳实践,在敏捷迭代开发模式的规范下,为团队提供了一套规范而完整的参考过程体系,旨在解决需求分析与软件设计的一致问题,解决领域建模与程序实现的不一致问题,控制业务复杂度与技术复杂度,为业务复杂的企业系统提供行之有效的设计解决方案。


课程亮点:

  • 领域驱动设计全方位阐释:课程内容来自讲师在项目中推行领域驱动设计的经验总结,是对Eric Evans领域驱动设计的全面阐释,内容覆盖领域驱动设计社区的最新进展。

  • 完整的领域驱动设计方法体系:结合多年实战经验总结出领域驱动设计统一过程,帮助多家客户顺利完成领域驱动设计与实施。

  • 项目实战与现场演绎:课程使用全真案例,以项目实战形式让学员全程模拟如何在项目中运用领域驱动设计,讲师将针对学员完成的内容做现场回顾与点评,改进设计方案。

  • 贯穿知识培训到项目落地:通过培训帮助学员掌握领域驱动设计的全过程,并给出行之有效的具体方法与实践,帮助学员更快地在实际项目中运用领域驱动设计。


课程收益

  • 理解和掌握领域驱动设计方法体系

  • 深入分析面向对象设计知识与设计模式

  • 需求分析与领域建模技术

  • 战略层面的软件体系架构设计以及微服务架构设计

  • 应用服务、领域逻辑以及基础设施的编程实现

课程方案

  • 案例分析:针对真实项目展开分析,帮助学员全面认识领域驱动设计

  • 案例讲解:为专门的知识点提供具体的案例讲解,帮助学员更好地理解知识点

  • 案例演练:提供真实或模拟项目,由学员以小组形式展开实战演练,输出交付物,由讲师进行点评


课程大纲:

第一部分 领域驱动设计体系

培训内容

以高屋建瓴的方式概括讲解整个领域驱动设计体系,内容包括:

  •  领域驱动设计体系基础

  •   领域驱动设计统一过程

快速介绍和解读由Eric Evans提出的领域驱动设计体系,了解该方法体系与软件研发生命周期之间的关系,给出领域驱动设计提倡的研发过程,简要介绍它的主要模式。

对比用例驱动的面向对象分析与设计方法、ICONIX方法,提炼经典领域驱动设计体系存在的不足,结合讲师丰富的项目经验与咨询经验,提出领域驱动设计统一过程,包括需求分析、架构设计与领域建模等内容,并在领域驱动设计的指导原则下进行。


在领域驱动设计统一过程的指导下,我提出了由十二个步骤构成的服务风暴的平行模型,为固化领域驱动设计的过程提供了规范过程与指导原则:

案例分析

Apache OFBiz是一个开源的、基于J2EE和XML规范的框架,用于构建大型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统。OFBiz采用了MVC模式,并贯穿于业务层和数据层,是典型的采用数据驱动设计的软件项目,广泛采用了违背面向对象设计原则的贫血模型与事务脚本模式,这些实践正是领域驱动设计要竭力避免的。

培训收益

  •   明确数据驱动设计与MVC的问题

  •   建立对领域驱动设计的初步认识

  •   初步了解领域驱动设计统一过程与服务风暴

 

第二部分 全局分析阶段

培训内容

 对整个项目进行业务的全局分析,内容包括:

  •   统一语言

  •  全局分析6W模型

  •   业务流程分析

  •   识别和编写业务服务

  •  划分子领域

  •  业务架构

统一语言是贯穿整个问题空间到解空间的重要模式,有利于领域专家与开发团队的共同协作,形成领域知识在整个团队之间的传递。它也是全局分析阶段最重要的业务知识分析基础,它与领域模型之间存在相辅相成的关系。

全局分析6W模型涵盖了整个全局分析阶段,了解该模型,可以帮助领域专家、团队负责人与架构师共同确定整个系统的问题空间,确定利益相关者、系统愿景和系统范围,确定价值需求和业务需求之间的关系,梳理业务流程,识别业务服务,建立反映整个系统的业务架构。

全局分析阶段主要由以下活动构成:

业务服务是基本的业务分析单元,是全局分析阶段的核心模式,也是识别子领域的主要输入。本阶段将主要围绕业务服务展开讲解、演练和分析,并通过实际案例对比了业务服务与用例之间的区别。

案例讲解

对比WMS系统的“收货”用例,说明业务服务与用例之间的区别,进而获得对应的业务服务图,并按照规定格式编写业务服务规约。

案例演练

识别购票业务流程的业务服务

模拟在铁路12306APP的整个购票流程,根据业务服务的定义梳理出贯穿整个流程的所有业务服务。

识别技术部落的子领域

目标:搭建一个技术部落(TRIBE),将与IT、互联网、数字领域相关的人、部落(业务、社区、兴趣组等)和内容联系起来,提供一个分享与交流的途径。在最基本的层面上,它是一个本地的博客、微博、微信文章、开源代码、活动、讲座、工作以及更多内容的聚合器。

根据讲师提供的业务服务,按照服务风暴的全局分析过程,演练如何正确地识别子领域,建立系统的业务架构。

培训收益

  • 理解全局分析6W模型

  • 学会识别业务服务,编写业务服务规约

  •  掌握服务风暴的全局分析过程方法,为系统建立业务架构

  •  明确全局分析阶段的交付物

 

第三部分 架构映射阶段

培训内容

在领域驱动的战略设计阶段,以领域为核心驱动力,以限界上下文为核心模式构建面向领域的架构体系,内容包括:

  •   限界上下文

  •   菱形对称架构

  •   上下文映射

  •   系统上下文

  •   领域驱动架构风格

结合软件复杂度的本质分析与软件架构的定义,剖析领域驱动设计对架构战略的应对方式,引出战略设计的核心模式——限界上下文。限界上下文作为业务能力的纵向切分、领域模型的知识语境,是响应业务变化的关键架构因素。由限界上下文之间的协作形成上下文映射,并根据领域驱动设计原则,建立以菱形对称架构与系统分层架构为支撑的领域驱动架构风格。

架构映射阶段仍然遵循服务风暴的设计过程,并以全局阶段输出的业务架构为主要输入,获得限界上下文组件图、服务序列图以及遵循菱形对称架构和系统分层架构的应用架构,完成从业务架构到应用架构的映射。整个过程如下图所示:

 案例分析

全球地面航班保障平台是某航空公司的核心系统建设目标,在设计该系统的整个解决方案时,运用了领域驱动设计统一过程,实现了从业务架构向应用架构的映射,包括通过业务服务识别限界上下文的映射过程,通过服务序列图确定上下文映射模式,定义服务契约,获得整个系统的逻辑架构,然后针对客户案例指导团队进行架构设计,输出实践结果。

案例演练

以全局分析阶段输出的技术部落业务架构为输入,开展架构映射工作坊,结合讲师给出的识别限界上下文的检查项(checklist)对组成业务架构的业务子域做进一步调整,将其映射为限界上下文,然后,根据讲师给出的“报名活动”业务服务规约,绘制服务序列图,推导出多个限界上下文之间的协作关系,定义API契约,并绘制出限界上下文组件图,最终得到整个系统的应用架构。

培训收益

  •   掌握领域驱动架构风格

  •   深刻理解限界上下文的本质

  •   掌握菱形对称架构模式

  •   掌握服务风暴的架构映射过程

  •   了解业务架构与应用架构之间的关系

  •   明确架构映射阶段的交付物

     

第四部分 领域建模阶段

培训内容

以业务服务为建模核心开展领域模型驱动设计,是保证领域驱动设计落地的重要条件,内容包括:

  •   领域分析建模

  •   领域设计建模

  •   领域实现建模

在限界上下文的知识边界内分析领域逻辑,提炼领域概念,在统一语言的指导下迭代地进行领域建模,包括建立清晰表达了领域概念的领域分析模型,与以聚合为核心要素的领域设计模型,通过服务驱动设计确定每个领域模型对象的职责,并顺利地引导到领域实现建模,以测试驱动开发的流程编写领域实现代码与测试代码。

整个领域建模阶段是一个不断迭代演化的建模过程:

 领域建模阶段需要掌握或了解如下方法:

  •   快速建模法

  •   角色构造型

  •   聚合的设计

  •   服务驱动设计

  •   测试驱动开发

整个建模阶段的输入是业务服务规约,而作为应用架构组成元素的限界上下文则规定了领域模型的边界。领域模型分为由聚合组成的静态领域模型和由序列图组成的动态领域模型,并由服务驱动设计将这些知识和方法串联起来:

 案例分析

展示信用卡分期系统/EAS系统的领域建模过程,包括通过快速建模法获得领域分析模型,建立以聚合为基本设计单元的领域设计模型,服务驱动设计获得的序列图脚本,并展示如何通过测试驱动开发进行领域实现建模,然后针对客户案例指导团队进行领域建模,最终输出由文本、图与代码构成的领域模型。

案例讲解

超市收银业务场景的模型演进

领域驱动设计的建模基础是面向对象分析与设计,通过超市收银业务场景的模型演进,帮助学员进一步理解面向对象设计的基本原则,并在良好的面向对象设计基础之上,演示领域驱动设计对面向对象设计的增强。

结算系统领域建模设计的改进

在个结算系统中,业务需求要求能够导⼊各种结算账单的Excel模板⽂件,然后通过具体的值填充这些报表模板,⽣成最终客户需要的Excel报表。团队采用经典的领域驱动设计过程,针对该业务场景获得了领域模型以及相应代码。然而,设计获得的领域模型体现了设计者对领域驱动设计的认识偏差。本案例演示了如何通过对正确地概念理解逐步改进整个模型的设计。

批量代付业务的领域建模

通过为批量代付业务定义和识别正确的业务服务,讲解从领域分析建模到领域设计建模、领域实现建模的全过程。

案例演练

在架构映射阶段获得应用架构基础上,选择“报名活动”等三个业务服务,利用快速建模法迅速获得领域分析模型,并识别出以聚合为核心的静态设计模型,然后开展服务驱动设计,获得序列图脚本,为进一步的测试驱动设计提供重要的设计输入。

培训收益

  •   掌握领域分析的快速建模法

  •   掌握聚合设计方法,深入理解聚合的价值

  •   掌握服务驱动设计方法,并与菱形对称架构结合

  •   掌握与服务驱动设计结合起来的测试驱动开发

  •   明确领域建模阶段的交付物

 

第五部分 领域驱动设计的价值

培训内容

领域驱动设计作为一套完整地覆盖需求分析、架构设计到编码实现的软件工程设计方法,它的价值主要体现在:

  •   完整而统一的设计过程和模式

  •   追求高质量设计与编码的领域驱动设计架构风格

  •   通过分而治之控制业务复杂度与技术复杂度

  •   设计原则和模式称为团队共同遵守的研发纪律

  •   以领域驱动设计统一过程和服务风暴的平行模型进一步总结领域驱动设计的重要内容,并推导出成功应用领域驱动设计的两大要素:

  •   边界是核心

  •   纪律是关键

本部分培训内容还总结了领域驱动设计统一过程三个阶段的主要交付物,并整理了运用领域驱动设计的常见反模式,通过对比这些不好的设计,进一步了解该如何正确地运用领域驱动设计。

培训收益

  •   回顾和总结领域驱动设计统一过程

  •   总结领域驱动设计统一过程的主要交付物

  •   总结领域驱动设计的常见反模式

 

 





返回上一级