开发经理
互联网
软件设计
推荐课程
average > 0 ? $model->average . '分' : '10.0分' ?>

软件设计模式

Bruce Zhang

前ThoughtWorks 架构师、敏捷教练

先后就职于中兴通讯、惠普 GDCC、中软国际、ThoughtWorks 等⼤大型中外企
业,任职⾓角⾊色为⾼高级软件⼯工程师,架构师,技术总监,⾸首席咨询师。现为深圳⼤
大眼科技有限公司的⾸首席架构师,联合创始⼈人。精通包括 C#、Java、Ruby、Scala、
Python、JavaScript 等多种语⾔言,熟练掌握⾯面向对象思想、领域驱动设计、函数式语
⾔言、架构、⼤大数据分析、敏捷与过程改进,并致⼒力于⼤大型软件企业的⾯面向服务系
统架构设计以及互联网 Web 系统架构设计。在 ThoughtWorks 期间,作为⼀一名咨询师,
主要为客户提供组织的敏捷转型、过程改进、系统架构监理、领域设计、代码质量提升等咨
询⼯工作。目前,作为公司产品的架构师,致力于商业智能产品与⼤大数据分析平台的开发
与架构设计

著译作包括《解构领域驱动设计》、《软件设计精要与模式》、《架构宝典》、《高可用可伸缩微服务架构》、《Java设计模式》、《恰如其分的软件架构》、《WCF服务编程》、《人件》、《重构——改善既有代码设计》评注版、《架构之美》评注版。

作为主持⼈人或讲师多次被应邀参加如中国软件⼤大会、QCon、MPD 大会、
Agile China、Scrum Gathering 等⼤大型会议,并作为培训讲师曾先后为摩托罗拉、惠普、
花旗银⾏行、携程、TCL、中兴通讯、赛 门铁克,广发证券、平安银⾏行等企业培训架构、
设计、DDD、敏捷等专题内容。著译作包括《软件设计精要与模式》、《Java 设计模式》、《恰如其分的软件架构》、《WCF 服务编程》、《⼈人件》等。目前,正在撰写《架构之
美(Beatiful Architecture)》评注版,即将出版。

先后就职于中兴通讯、惠普 GDCC、中软国际、ThoughtWorks 等⼤大型中外企 业,任职⾓角⾊色为⾼高级软件⼯工程师,架构师,技术总监,⾸首席咨询师。现为深圳⼤ 大眼科技有限公司的⾸首席架构师,联合创始⼈人。精通包括 C#、Java、Ruby、Scala、 Python、JavaScript 等多种语⾔言,熟练掌握⾯面向对象思想、领域驱动设计、函数式语 ⾔言、架构、⼤大数据分析、敏捷与过程改进,并致⼒力于⼤大型软件企业的⾯面向服务系 统架构设计以及互联网 Web 系统架构设计。在 ThoughtWorks 期间,作为⼀一名咨询师, 主要为客户提供组织的敏捷转型、过程改进、系统架构监理、领域设计、代码质量提升等咨 询⼯工作。目前,作为公司产品的架构师,致力于商业智能产品与⼤大数据分析平台的开发 与架构设计 著译作包括《解构领域驱动设计》、《软件设计精要与模式》、《架构宝典》、《高可用可伸缩微服务架构》、《Java设计模式》、《恰如其分的软件架构》、《WCF服务编程》、《人件》、《重构——改善既有代码设计》评注版、《架构之美》评注版。 作为主持⼈人或讲师多次被应邀参加如中国软件⼤大会、QCon、MPD 大会、 Agile China、Scrum Gathering 等⼤大型会议,并作为培训讲师曾先后为摩托罗拉、惠普、 花旗银⾏行、携程、TCL、中兴通讯、赛 门铁克,广发证券、平安银⾏行等企业培训架构、 设计、DDD、敏捷等专题内容。著译作包括《软件设计精要与模式》、《Java 设计模式》、《恰如其分的软件架构》、《WCF 服务编程》、《⼈人件》等。目前,正在撰写《架构之 美(Beatiful Architecture)》评注版,即将出版。

课程费用

6800.00 /人

课程时长

2

成为教练

课程简介

1、全真案例,借助案例与设计模式知识的原理,借助最佳实践,帮助您提高设计能力,从而提高开发效率和设计质量
2、以新视角,揭示模式的本质、思想方法,剖析出模式之“道”,跳出“为模式而模式”的“陷阱”
3、提升设计能力,使开发人员由“编程小工”到设计专家
4、结合测试驱动开发与重构,提高软件设计质量
5、关注业界内设计模式,以实战训练驱动对设计模式的理解与运用

目标收益

培训对象

1、员工无法接手遗留系统,原因是代码杂乱,可读性差
2、团队成员没有设计模式知识与经验,无法实施敏捷开发
3、系统难以重构,不利于产品的重用与二次开发
4、开发效率得不到保障,因为详细设计人员不能理解架构文档与详细设计方案
5、设计方案难于应对需求变更
6、设计的系统架构缺乏可扩展性、可维护性和可测试性,不能合理地重用
7、架构、设计、开发三个环节中各个角色不能理解设计意图,很难沟通

课程大纲

议题一:卓越的软件设计思想
卓越软件设计的特征
• 体现简单之美的设计方案
• 可重用的对象与组件
• 支持良好的可扩展性
• 充分的测试覆盖率
• 可读性高的代码;
案例分析 • 代码阅读:通过运用组合方法模式思想对代码进行重构,进而演化为Template Method模式去除重复代码
• 代码阅读:分析面向对象设计方法所不能解决的重复问题,从而引入函数式思想去除重复
• 邮件服务器:分析邮件服务器代码暴露的问题,在可重用性、代码可维护性、可扩展性等诸多方面着手,剖析代码坏味道。
面向对象的设计要素 • 合理封装的要点
• 迪米特法则
• 继承与委派的区别
• 关注点分离原则
• 多态与抽象
案例分析 • 报表系统之参数处理:了解封装的本质,明确职责的分配以及智能对象的意义,理解“信息专家”模式。
• 事务处理的设计:通过分析职责的承担者,从而辨别职责的分配,并以组合桥接的方式进行抽象的分离。
• 电子商务系统之订单处理:对行为的封装,职责的委派而非继承的方式,进而重构到Command模式。
面向对象设计核心的SOLID原则 • 单一职责原则(SRP):该原则是合理封装对象,分配职责的重要原则;
• 开放封闭原则(OCP):该原则体现了扩展式开发的核心思想;
• Liskov替换原则(LSP):可以将该原则视为是对是否正确运用继承的检验标准;
• 接口隔离原则(ISP):对于接口的粒度进行规划,以便于设计出更好的接口;
• 依赖倒置原则(DCP):对于依赖和解耦的分析,利用抽象保证设计的可扩展性;
议题二:整洁代码与重构
编写整洁的代码
• 糟糕的代码与混乱的代价,整洁代码的艺术;
• 如何对变量、方法和类进行命名;
• 如何设计方法,遵循DRY与CQS原则;
• 如何进行错误处理和异常处理;
• 如何组织类和包;
案例分析 给出真实项目中真实的代码片段,对这些代码进行分析,并利用整洁代码的原则进行改善。这些代码涉及到的问题包括:循环嵌套太多,方法命名不合理,缺乏足够的封装,性能问题;
通过重构改善既有代码 • 破窗理论与重构的原则,包括重构与设计的关系,重构的时机和开展重构的原因
• 介绍代码的坏味道:详细介绍各种代码的坏味道,包括重复的代码、过长函数、过大类、依恋情结、平行继承体系、发散式变化、霰弹式修改等22种坏味道。
• 介绍常见的重构手法,例如提取参数、提取方法、提取类、搬移方法、提取参数对象,以委托取代继承等,并利用实际的案例展现如何对丑陋的代码进行重构。
案例分析 对媒体管理系统的坏味道识别,利用重构改善代码,并逐步引入Strategy模式与Visitor模式,进而改善设计。
议题三:合理的职责分配是良好设计的基础
职责驱动设计
• 职责的层次:包括职责层次的识别、职责层次与软件架构层次之间的关系、职责与概念、规约与实现
• 对象的角色:角色、职责与协作是三位一体的关系,角色是发起职责的对象,职责则应该是对象之间的协作
• 模块级的职责分配:如何根据职责对模块进行分解,了解高内聚、松耦合原则。
案例分析 • 对邮件服务器进行分析,通过分辨职责层次,来改善设计。并提出需求变更,从而引入对观察者模式、策略模式、简单工厂模式、调停者模式与职责链模式的对比与分析;
• 处理HTTP请求与应答,体现信息持有者角色;
• JMS对Queue的创建体现构造者角色;
• 税务报告的生成体现服务提供者角色;
• 服务定位器体现协调者角色;
• 内容验证器体现控制者角色;
• EISaaS的模块划分;
• 基于AKKA的REST框架Spray;
• 国际报税系统的架构演进,提出模块重用的方式;
职责分配遵循的原则与模式 • 分析单一职责原则:分析该原则的核心思想,关注对象的变化点
• 专家模式:专家模式的核心思想是信息的持有者是操作该信息的专家
• 自治对象:分析了自治对象的特征,分别包括:最小完备,稳定空间,自我履行与独立进化
案例分析 • 设备状态的迁移:利用“自治对象”思想逐步引入State模式,并结合实际需求分析标准State模式的问题,从而对该模式进行改进
议题四:应对需求的变化,设计可扩展的软件
如何应对需求的变化
• 抽象的关键在于寻找多个对象(或行为)具有的共同特征,并对特性进行泛化
• 函数式非凡的抽象能力
• 识别变化点,对变化进行封装
• 解耦具体依赖:介绍常见的解除具体依赖的方法,包括表驱动法、配置与反射、IoC容器、惯例优于配置
案例分析
• 项目管理模型的抽象,通过对多种项目管理过程进行分析,对各种模型概念进行分类,并抽象出模型的共同特征,从而简化模型;
• 电子商务系统的票据业务规则,引入Specification模式;
• CIMS系统的机器加载策略,引入Strategy模式;
• 短信服务,引入Facade模式与Adpater模式;
• 人力资源系统考勤模块,介绍Gateway模式;
• URL Web请求,讲解如何解耦具体依赖;
扩展式设计 • 扩展式设计的过程
案例分析 • 消息队列规范的设计:通过分析JMS、MSMQ的设计,理解抽象的含义,例如理解面向接口设计、接口隔离原则、按意图设计、Facade模式;
• 保单问卷调查:讲解如何从坏设计逐步重构到Visitor模式;
议题五:设计模式的本质
设计模式的境界
• 初学者:拔剑四顾心茫然,不知道该如何运用设计模式
• 熟练者:过尤不及,为模式而模式,常常导致设计过度
• 精通者:无招胜有招,掌握了设计模式的本质,能够恰如其分地运用设计模式
设计的常见问题 • 理论与设计无法有效结合
• 过度运用设计模式
• 急于编码,没有有效的设计
设计模式的本质 • 合理的职责分配是基础
• 封装并抽象变化是核心
• 合理运用面向对象设计思想
• 合理运用面向对象设计原则
案例分析:JUnit框架 通过全面剖析JUnit测试框架,了解大师的设计艺术,展现JUnit是如何保证框架的简单、可扩展、可重用。内容包括:
• JUnit的组件结构
• JUnit的Test Case设计
• 如何支持Test Result显示的扩展
• JUnit中如何通过复杂的设计来简化用户的使用
议题一:卓越的软件设计思想
卓越软件设计的特征
• 体现简单之美的设计方案
• 可重用的对象与组件
• 支持良好的可扩展性
• 充分的测试覆盖率
• 可读性高的代码;
案例分析
• 代码阅读:通过运用组合方法模式思想对代码进行重构,进而演化为Template Method模式去除重复代码
• 代码阅读:分析面向对象设计方法所不能解决的重复问题,从而引入函数式思想去除重复
• 邮件服务器:分析邮件服务器代码暴露的问题,在可重用性、代码可维护性、可扩展性等诸多方面着手,剖析代码坏味道。
面向对象的设计要素
• 合理封装的要点
• 迪米特法则
• 继承与委派的区别
• 关注点分离原则
• 多态与抽象
案例分析
• 报表系统之参数处理:了解封装的本质,明确职责的分配以及智能对象的意义,理解“信息专家”模式。
• 事务处理的设计:通过分析职责的承担者,从而辨别职责的分配,并以组合桥接的方式进行抽象的分离。
• 电子商务系统之订单处理:对行为的封装,职责的委派而非继承的方式,进而重构到Command模式。
面向对象设计核心的SOLID原则
• 单一职责原则(SRP):该原则是合理封装对象,分配职责的重要原则;
• 开放封闭原则(OCP):该原则体现了扩展式开发的核心思想;
• Liskov替换原则(LSP):可以将该原则视为是对是否正确运用继承的检验标准;
• 接口隔离原则(ISP):对于接口的粒度进行规划,以便于设计出更好的接口;
• 依赖倒置原则(DCP):对于依赖和解耦的分析,利用抽象保证设计的可扩展性;
议题二:整洁代码与重构
编写整洁的代码
• 糟糕的代码与混乱的代价,整洁代码的艺术;
• 如何对变量、方法和类进行命名;
• 如何设计方法,遵循DRY与CQS原则;
• 如何进行错误处理和异常处理;
• 如何组织类和包;
案例分析
给出真实项目中真实的代码片段,对这些代码进行分析,并利用整洁代码的原则进行改善。这些代码涉及到的问题包括:循环嵌套太多,方法命名不合理,缺乏足够的封装,性能问题;
通过重构改善既有代码
• 破窗理论与重构的原则,包括重构与设计的关系,重构的时机和开展重构的原因
• 介绍代码的坏味道:详细介绍各种代码的坏味道,包括重复的代码、过长函数、过大类、依恋情结、平行继承体系、发散式变化、霰弹式修改等22种坏味道。
• 介绍常见的重构手法,例如提取参数、提取方法、提取类、搬移方法、提取参数对象,以委托取代继承等,并利用实际的案例展现如何对丑陋的代码进行重构。
案例分析
对媒体管理系统的坏味道识别,利用重构改善代码,并逐步引入Strategy模式与Visitor模式,进而改善设计。
议题三:合理的职责分配是良好设计的基础
职责驱动设计
• 职责的层次:包括职责层次的识别、职责层次与软件架构层次之间的关系、职责与概念、规约与实现
• 对象的角色:角色、职责与协作是三位一体的关系,角色是发起职责的对象,职责则应该是对象之间的协作
• 模块级的职责分配:如何根据职责对模块进行分解,了解高内聚、松耦合原则。
案例分析
• 对邮件服务器进行分析,通过分辨职责层次,来改善设计。并提出需求变更,从而引入对观察者模式、策略模式、简单工厂模式、调停者模式与职责链模式的对比与分析;
• 处理HTTP请求与应答,体现信息持有者角色;
• JMS对Queue的创建体现构造者角色;
• 税务报告的生成体现服务提供者角色;
• 服务定位器体现协调者角色;
• 内容验证器体现控制者角色;
• EISaaS的模块划分;
• 基于AKKA的REST框架Spray;
• 国际报税系统的架构演进,提出模块重用的方式;
职责分配遵循的原则与模式
• 分析单一职责原则:分析该原则的核心思想,关注对象的变化点
• 专家模式:专家模式的核心思想是信息的持有者是操作该信息的专家
• 自治对象:分析了自治对象的特征,分别包括:最小完备,稳定空间,自我履行与独立进化
案例分析
• 设备状态的迁移:利用“自治对象”思想逐步引入State模式,并结合实际需求分析标准State模式的问题,从而对该模式进行改进
议题四:应对需求的变化,设计可扩展的软件
如何应对需求的变化
• 抽象的关键在于寻找多个对象(或行为)具有的共同特征,并对特性进行泛化
• 函数式非凡的抽象能力
• 识别变化点,对变化进行封装
• 解耦具体依赖:介绍常见的解除具体依赖的方法,包括表驱动法、配置与反射、IoC容器、惯例优于配置
案例分析
• 项目管理模型的抽象,通过对多种项目管理过程进行分析,对各种模型概念进行分类,并抽象出模型的共同特征,从而简化模型;
• 电子商务系统的票据业务规则,引入Specification模式;
• CIMS系统的机器加载策略,引入Strategy模式;
• 短信服务,引入Facade模式与Adpater模式;
• 人力资源系统考勤模块,介绍Gateway模式;
• URL Web请求,讲解如何解耦具体依赖;
扩展式设计
• 扩展式设计的过程
案例分析
• 消息队列规范的设计:通过分析JMS、MSMQ的设计,理解抽象的含义,例如理解面向接口设计、接口隔离原则、按意图设计、Facade模式;
• 保单问卷调查:讲解如何从坏设计逐步重构到Visitor模式;
议题五:设计模式的本质
设计模式的境界
• 初学者:拔剑四顾心茫然,不知道该如何运用设计模式
• 熟练者:过尤不及,为模式而模式,常常导致设计过度
• 精通者:无招胜有招,掌握了设计模式的本质,能够恰如其分地运用设计模式
设计的常见问题
• 理论与设计无法有效结合
• 过度运用设计模式
• 急于编码,没有有效的设计
设计模式的本质
• 合理的职责分配是基础
• 封装并抽象变化是核心
• 合理运用面向对象设计思想
• 合理运用面向对象设计原则
案例分析:JUnit框架
通过全面剖析JUnit测试框架,了解大师的设计艺术,展现JUnit是如何保证框架的简单、可扩展、可重用。内容包括:
• JUnit的组件结构
• JUnit的Test Case设计
• 如何支持Test Result显示的扩展
• JUnit中如何通过复杂的设计来简化用户的使用

提交需求