课程介绍
本课程不仅讲解高质量软件设计的理论知识,更关键是将这些知识投放到各个真实的设计场景中。在这些场景中,可以看到我们要面对的设计难题,通过对设计难题的深入剖析,寻找问题的根源,对症下药,从而制订出正确的设计方案。课程的案例选取了许多在需求变更中不断变化的设计过程,从而用慢动作的手法展现了,最初的需求与设计是怎样,第一次变更的设计,第二层变更的设计,第三次变更的设计…这样的过程展示了,如何在需求变更的过程中,通过每一次正确的设计,不让软件退化,来保证高质量的软件设计。
首先深入剖析软件质量下降的根源,提出重构是软件变更中保持高质量的必然,讲解如何运用“两顶帽子”的方式应对变更,拒绝腐化。站在实战的角度讲解高质量软件设计的“小步快跑”过程。接着,用真实案例讲解已经代码腐化的遗留系统是如何通过“软件重构七步曲”,由简入深、循序渐进地重构一个大系统。课程的最后,更加深层次地讲解软件重构面临的难题,以及有效地解决之道。
培训对象
初中高级工程师、企业架构师、软件设计师;
各类软件研发中心的软件设计师、架构师、项目经理、技术总监、质量部门经理;
对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人;
学员基础:
目前面临复杂遗留系统,必须要维护和重构;
具有面向对象的基本概念,熟悉基本设计模式。
课程收益
通过大量的真实案例,详细地介绍软件设计过程中需要注意的要点以及难点;
课程1/3时间讲解核心思想,1/3时间动手重构实践,1/3点评分析总结;
从而切实有效地提高学员的设计开发水平,有效地改善软件设计质量。
知识概要
-- 什么是高质量的软件设计;
-- 软件设计原则;
-- 适配器模式;
-- 策略模式;
-- 工厂模式;
-- 单例模式;
-- 原型模式;
-- 模板方法模式;
-- 装饰者模式;
-- 桥接模式;
-- 享元模式;
-- 其它设计模式;
-- 剖析软件质量不断下降的根源;
-- 高质量的软件设计过程;
-- 何为重构;
-- 关于重构的讨论。
课程大纲
软件设计模式
第一部分 高质量软件设计
第一章:什么是高质量的软件设计
情景剧:软件设计焦虑症
1)上次的设计太糟糕了,痛下决心以后要好好设计
2)再次进行软件设计时却不知道该怎样设计
探讨:如何进行高质量的软件设计
1)软件的质量保证:内部质量与外部质量
2)高质量软件设计的标准:易读、易于维护、易于变更
第二章:软件设计原则
易于阅读:
易于维护与变更
探讨软件设计模式:
1)设计模式的由来
2)设计模式的发展
3)设计模式对高质量软件设计的作用
第二部分 软件设计模式
第三章:适配器模式
什么是适配器模式
适配器模式的应用
1)适配器模式解决第三方框架带来的难题
案例:Hibernate适配器的设计
2)适配器模式解决外部接口的设计难题
案例:第三方支付接口的设计
案例:财务数据接口的设计
第四章:策略模式
什么是策略模式
策略模式的应用
案例:工资发放功能设计改进的过程
案例:数据导出功能的设计实现
案例:财务凭证生成功能的设计过程
练习:财务凭证生成功能的设计与实现
第五章:工厂模式
探讨软件设计中遇到的难题
简单工厂模式
案例:数据导出功能的工厂实现
工厂方法模式
案例:SAX框架的工厂类设计
抽象工厂模式
案例:标签库的设计改进过程
第六章:单例模式
什么是单例模式
单例模式的应用
1)单例模式带来的设计变革
2)单例模式改变了很多软件的设计
第七章:原型模式
什么是原型模式
1)工厂类在提供产品时遇到的设计问题
2)原型模式及其概念
原型模式的设计实现
案例:函数调用的无副作用问题
案例:JavsScript中的原型模式
第八章:模板方法模式
什么是模板方法模式
1)煮咖啡给我们的启示
2)设计工厂类的新思路
3)模板方法模式及其概念
模板方法模式的作用与技巧
案例:一个工厂模板的设计与实现
深入理解不要重复自己原则
第九章:装饰者模式
什么是装饰者模式
1)业务量增长带来的多数据源问题
2)运用装饰者模式巧妙解决多数据源问题
3)装饰者模式及其概念
装饰者模式的应用
案例:多数据源的设计实现
案例:商城收银系统的设计变更过程
重新理解里氏替换原则
1)透明的功能扩展
1)里氏替换原则
练习:商场收银系统的2种设计与实现
第十章:桥接模式
什么是桥接模式
1)对象继承的泛滥
2)桥接模式及其概念
桥接模式的应用
案例:员工管理与工资发放的设计
案例:查询支持类的设计
深入体会单一职责原则
第十一章:享元模式
什么是享元模式
1)Hibernate是怎样访问数据的
2)享元模式及其概念
享元模式的应用
案例:数据缓存的设计实现
案例:享元模式在大数据中的应用
第十二章:其它设计模式
观察者模式:JobHunter的情景剧
代理模式:老板与秘书的差异
命令模式:像工作流一样处理业务
外观模式:超级家庭影院的烦恼
构建器模式:SQL Builder的设计
组合模式:如何构建一棵树
中介者模式:QQ在沟通中的作用
迭代器模式:如何顺序访问一个集合
软件重构实战
第一部分 为什么软件需要及时重构
第一单元:剖析软件质量不断下降的根源
质量不断下降的表现/以往采取的措施/带来的问题/分析与反思
案例分析:一个遗留系统的演化过程
软件质量下降的根源
1)软件总是因变更而变得越来越复杂
2)软件结构已经不再适应复杂的软件需求
3)必须要调整软件结构以适应新的软件需求
软件是因需求变更而质量下降吗?
案例分析:推演软件变更的设计过程
应对软件变更的最佳方式:两顶帽子
案例:演示两顶帽子的设计过程
案例:财务凭证生成程序的设计过程
第二单元:高质量的软件设计过程
案例讲解软件设计原则
1)低耦合
案例:购票业务类与数据访问类
案例:需求变更与可扩展点设计
案例:Rectangle/Square的问题
案例:查询参数传递类的问题
2)高内聚
案例:财务凭证变更带来的问题
案例:超级大函数与大对象的难题
案例:MySQL读写分离的改造过程
以往软件设计的过程
1)演示以往软件设计的过程
2)剖析以往软件设计的问题与风险
小步快跑模式的开发过程
案例:演示小步快跑的开发过程
案例:数据推送程序的设计过程
第二部分 如何进行软件重构
第三单元:何为重构
软件重构的概念
1)重构是一系列代码的等量变换
案例:一个Hello World重构过程
2)重构的保险索:自动化测试
案例:Hello World的自动化测试过程
3)软件修改的四种动机——重构的价值
4)一个真实的谎言——重构的误区
5)重构的主要方法与技巧
案例分析:重构一个大型遗留系统
1)重构第一步:分解大函数
案例:演示大函数产生的过程
案例:演示抽取方法操作步骤
2)重构第二步:拆分大对象
案例:演示超级大对象的产生过程
案例:演示抽取类的操作步骤
案例:演示“分久必合,合久必分”的重构过程
3)重构第三步:提高复用率
案例:提高代码复用的6个方法
案例:演示新增代码时的代码复用过程
4)重构第四步:可扩展设计
案例:讲解可扩展设计的4个方法
案例:讲解新增代码的可扩展设计过程
5)重构第五步:降低耦合度
案例:讲解接口、实现与工厂模式
案例:讲解外部接口解耦与适配器模式
6)重构第六步:系统分层
反思软件架构需要怎样的分层结构
遗留系统如何拥抱需求变化
遗留系统如何应对技术变革
7)重构第七步:领域驱动设计
案例:智能温控器分析设计过程(嵌入式+物联网)
练习:重构一个小程序并编写测试脚本
第四单元:关于重构的讨论
什么时候重构
测试的困境
重构的评价
认证过程
无认证考试
开班信息
暂无开班信息