课程

课程介绍

        本课程不仅讲解高质量软件设计的理论知识,更关键是将这些知识投放到各个真实的设计场景中。在这些场景中,可以看到我们要面对的设计难题,通过对设计难题的深入剖析,寻找问题的根源,对症下药,从而制订出正确的设计方案。课程的案例选取了许多在需求变更中不断变化的设计过程,从而用慢动作的手法展现了,最初的需求与设计是怎样,第一次变更的设计,第二层变更的设计,第三次变更的设计…这样的过程展示了,如何在需求变更的过程中,通过每一次正确的设计,不让软件退化,来保证高质量的软件设计。
        首先深入剖析软件质量下降的根源,提出重构是软件变更中保持高质量的必然,讲解如何运用“两顶帽子”的方式应对变更,拒绝腐化。站在实战的角度讲解高质量软件设计的“小步快跑”过程。接着,用真实案例讲解已经代码腐化的遗留系统是如何通过“软件重构七步曲”,由简入深、循序渐进地重构一个大系统。课程的最后,更加深层次地讲解软件重构面临的难题,以及有效地解决之道。

培训对象

初中高级工程师、企业架构师、软件设计师;
各类软件研发中心的软件设计师、架构师、项目经理、技术总监、质量部门经理;
对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人;
学员基础:
目前面临复杂遗留系统,必须要维护和重构;
具有面向对象的基本概念,熟悉基本设计模式。

课程收益

通过大量的真实案例,详细地介绍软件设计过程中需要注意的要点以及难点;
课程1/3时间讲解核心思想,1/3时间动手重构实践,1/3点评分析总结;
从而切实有效地提高学员的设计开发水平,有效地改善软件设计质量。

知识概要

-- 什么是高质量的软件设计;
-- 软件设计原则;
-- 适配器模式;
-- 策略模式;
-- 工厂模式;
-- 单例模式; 
-- 原型模式;
-- 模板方法模式;
-- 装饰者模式;
-- 桥接模式;
-- 享元模式;
-- 其它设计模式;
-- 剖析软件质量不断下降的根源;
-- 高质量的软件设计过程;
-- 何为重构;
-- 关于重构的讨论。

课程大纲

模块

学习内容

第一天AM

软件设计模式

第一部分 高质量软件设计

第一章:什么是高质量的软件设计

情景剧:软件设计焦虑症

1)上次的设计太糟糕了,痛下决心以后要好好设计

2)再次进行软件设计时却不知道该怎样设计

探讨:如何进行高质量的软件设计

1)软件的质量保证:内部质量与外部质量

2)高质量软件设计的标准:易读、易于维护、易于变更

第二章:软件设计原则

易于阅读:

易于维护与变更

探讨软件设计模式:

1)设计模式的由来

2)设计模式的发展

3)设计模式对高质量软件设计的作用

第二部分 软件设计模式

第三章:适配器模式

什么是适配器模式

适配器模式的应用

1)适配器模式解决第三方框架带来的难题

案例:Hibernate适配器的设计

2)适配器模式解决外部接口的设计难题

案例:第三方支付接口的设计

案例:财务数据接口的设计

第一天PM

第四章:策略模式

什么是策略模式

策略模式的应用

案例:工资发放功能设计改进的过程

案例:数据导出功能的设计实现

案例:财务凭证生成功能的设计过程

练习:财务凭证生成功能的设计与实现

第五章:工厂模式

探讨软件设计中遇到的难题

简单工厂模式

案例:数据导出功能的工厂实现

工厂方法模式

案例:SAX框架的工厂类设计

抽象工厂模式

案例:标签库的设计改进过程

第六章:单例模式

什么是单例模式

单例模式的应用

1)单例模式带来的设计变革

2)单例模式改变了很多软件的设计

第二天AM

第七章:原型模式

什么是原型模式

1)工厂类在提供产品时遇到的设计问题

2)原型模式及其概念

原型模式的设计实现

案例:函数调用的无副作用问题

案例:JavsScript中的原型模式

第八章:模板方法模式

什么是模板方法模式

1)煮咖啡给我们的启示

2)设计工厂类的新思路

3)模板方法模式及其概念

模板方法模式的作用与技巧

案例:一个工厂模板的设计与实现

深入理解不要重复自己原则

第九章:装饰者模式

什么是装饰者模式

1)业务量增长带来的多数据源问题

2)运用装饰者模式巧妙解决多数据源问题

3)装饰者模式及其概念

装饰者模式的应用

案例:多数据源的设计实现

案例:商城收银系统的设计变更过程

重新理解里氏替换原则

1)透明的功能扩展

1)里氏替换原则

练习:商场收银系统的2种设计与实现

第二天PM

第十章:桥接模式

什么是桥接模式

1)对象继承的泛滥

2)桥接模式及其概念

桥接模式的应用

案例:员工管理与工资发放的设计

案例:查询支持类的设计

深入体会单一职责原则

第十一章:享元模式

什么是享元模式

1)Hibernate是怎样访问数据的

2)享元模式及其概念

享元模式的应用

案例:数据缓存的设计实现

案例:享元模式在大数据中的应用

第十二章:其它设计模式

观察者模式:JobHunter的情景剧

代理模式:老板与秘书的差异

命令模式:像工作流一样处理业务

外观模式:超级家庭影院的烦恼

构建器模式:SQL Builder的设计

组合模式:如何构建一棵树

中介者模式:QQ在沟通中的作用

迭代器模式:如何顺序访问一个集合

第三天AM

软件重构实战

第一部分 为什么软件需要及时重构

第一单元:剖析软件质量不断下降的根源

质量不断下降的表现/以往采取的措施/带来的问题/分析与反思

案例分析:一个遗留系统的演化过程

软件质量下降的根源

1)软件总是因变更而变得越来越复杂

2)软件结构已经不再适应复杂的软件需求

3)必须要调整软件结构以适应新的软件需求

软件是因需求变更而质量下降吗?

案例分析:推演软件变更的设计过程

应对软件变更的最佳方式:两顶帽子

案例:演示两顶帽子的设计过程

案例:财务凭证生成程序的设计过程

第二单元:高质量的软件设计过程

案例讲解软件设计原则

1)低耦合

案例:购票业务类与数据访问类

案例:需求变更与可扩展点设计

案例:Rectangle/Square的问题

案例:查询参数传递类的问题

2)高内聚

案例:财务凭证变更带来的问题

案例:超级大函数与大对象的难题

案例:MySQL读写分离的改造过程

以往软件设计的过程

1)演示以往软件设计的过程

2)剖析以往软件设计的问题与风险

小步快跑模式的开发过程

案例:演示小步快跑的开发过程

案例:数据推送程序的设计过程

第三天PM

第二部分 如何进行软件重构

第三单元:何为重构

软件重构的概念

1)重构是一系列代码的等量变换

案例:一个Hello World重构过程

2)重构的保险索:自动化测试

案例:Hello World的自动化测试过程

3)软件修改的四种动机——重构的价值

4)一个真实的谎言——重构的误区

5)重构的主要方法与技巧

案例分析:重构一个大型遗留系统

1)重构第一步:分解大函数

案例:演示大函数产生的过程

案例:演示抽取方法操作步骤

2)重构第二步:拆分大对象

案例:演示超级大对象的产生过程

案例:演示抽取类的操作步骤

案例:演示“分久必合,合久必分”的重构过程

3)重构第三步:提高复用率

案例:提高代码复用的6个方法

案例:演示新增代码时的代码复用过程

4)重构第四步:可扩展设计

案例:讲解可扩展设计的4个方法

案例:讲解新增代码的可扩展设计过程

5)重构第五步:降低耦合度

案例:讲解接口、实现与工厂模式

案例:讲解外部接口解耦与适配器模式

6)重构第六步:系统分层

反思软件架构需要怎样的分层结构

遗留系统如何拥抱需求变化

遗留系统如何应对技术变革

7)重构第七步:领域驱动设计

案例:智能温控器分析设计过程(嵌入式+物联网)

练习:重构一个小程序并编写测试脚本

第四单元:关于重构的讨论

什么时候重构

测试的困境

重构的评价

认证过程

无认证考试

开班信息

暂无开班信息