4006-998-758
3000+课程任你选择
设计模式实战解析 – 进阶篇V2
研发学院 软件架构师 开课时间:2022-02-15
戴昊

现任创业AI公司研发技术总监负责带领团队研发计算机视觉、AI安防及大数据相关产品。15年+ 大型软件产品架构经验。曾为日本第一,世界第二的瑞穗银行(Mizuho Bank);世界第二大证券交易所 – 东京证券,五十铃汽车开发企业级系统。曾给深圳证券交易所,深圳证券,招商银行信用卡中心,平安金融,中国电信,DELL 讲授过企业级架构及重构与模式的课程。擅长企业级系统架构,领域驱动设计,重构与模式。


查看老师详情
课程内容

课程介绍


无数软件企业及其研发团队都面临着,大量初级程序开发人员低质量软件开发带来的严重问题,即使那些工作多年的高级程序员也存在着对提高软件设计质量认识不深的问题。正是由于以上的问题,造成许多公司对运行了多年的核心业务,运行维护成本越来越高,却不能更换、一直维护下去的恶性循环。如何通过培训,切实有效地提高员工设计开发水平,从而有效地改善软件设计质量,成为越来越多的软件企业迫切需要解决的问题。

本课程不仅在讲解高质量软件设计的理论知识,更关键是将这些知识投放到各个真实的设计场景中。在这些场景中,我们可以看到我们要面对的设计难题,通过对设计难题的深入剖析,寻找问题的根源,对症下药,从而制订出正确的设计方案。

掌握面向对象设计思想与基本原则,提高设计能力;

1、剖析设计模式的本质,跳出“为模式而模式”的设计方式,运用设计原则改善设计质量;

2、掌握场景驱动设计的方式,明确了解角色、职责与协作在设计中的作用;

3、梳理设计过程,结合真实案例,从业务建模入手,掌握基本的设计手法;

4、了解和掌握UML,运用包图、组件图、类图和时序图进行系统设计;

5、识别设计的坏味道,利用重构改善设计;

6、剖析经典的开源框架,分析Java/.NET系统的架构设计原则;

7、深入介绍分层架构、IoC、ORM等企业应用架构的核心模式;


课程特点



1.    将UML、OO、设计模式与重构有机结合;

2.    精炼设计原则,通过引入对职责与抽象的分析,提高设计能力;

3.    结合用例驱动与领域驱动,提出场景驱动设计,简化设计过程。


课程大纲

Day1


一、代码与设计模式

1.  NASA告诉我们为什么要关注代码

2.  设计与代码实现之间的鸿沟

3.  我们应该更加关注哪一个软件质量特性

4.  设计模式背后的心法 -SOLID原则


二、  单一职责原则

1.  次时代租车服务终端 (ARCS)的初步设计

2.  用例 (UseCase)   的作用 – 划分边界及概览

3.  SRP的设计误区

4.  重构至 SRP 的方法1:提取类

5.  重构至 SRP 的方法2:Proxy模式

6.    过程性代码的 SRP

7.    违反直觉的真相:性能优化的步骤


三、开放封闭原则

1.  代码中的接线板是什么?

2.  编程价值观 – 沟通,简单,灵活

3.  如何做到对扩展开放,对修改封闭

4.  次时代租车服务终端 (ARCS)的促销需求

5.  笨拙的促销实现

6.  如何不修改代码而改变它的行为

7.  最简单的 OCP实现 – 策略模式

8.  敏捷开发的精髓 – 只被第一颗子弹击中


四、 里氏替换原则

1.  什么才是好的继承关系

2.  子类为什么要能透明的替换基类

3.  次时代租车服务终端 (ARCS)的新需求 – 电动轿车费用计算

4.  白盒复用 还是 黑盒复用

5.  IS-A的精髓:针对属性还是针对行为

6.  契约式设计继承体系

7.  重构方法:提升为兄弟类

8.  如何才能让 次时代租车服务终端 (ARCS)的代码符合 LSP

9.   这样做我们可能会引入什么新的问题?


五、接口隔离原则

1.  接口“变胖”的问题 – 接口污染

2.  佳能一体机的遗留接口问题

3.  如何实现接口分离   – 适配器模式

4.  类适配器 – 多继承

5.  对象适配器 – 委托

6.  使用单元测试来发现问题

7.  次时代租车服务终端 (ARCS)在接口划分上的问题

8.  如何简化复杂的逻辑

9.  如何使用模板方法分离抽象与具体

    案例:ATM机接口设计的演化


六、依赖倒置原则

1.  结构化设计理念的问题

2.  对象化设计理念

3.  依赖倒置到底倒置了什么

4.  如何分离关注点

5.  DI-依赖注入模式:讲对象的创建与使用分离

   案例:消息队列设计的演化


七、策略模式详解

1.  工资发放功能遇到的难题

2.  工资发放功能最初的设计及其问题

3.  对问题的分析过程及其新的设计思路

4.  策略模式及其概念

5.  数据导出功能的设计实现

6.  数据导出功能的变更与改进过程

7.  财务凭证生成功能的设计过程

8.  财务凭证生成功能的初始需求与设计

9.  财务凭证生成功能的扩展与分析过程


八、代理模式详解

1.  如何隐式的添加日志功能

2.  为Controller添加代理

3.  使用继承方式实现代理模式

4.  动态代理原理解析

5.  Java动态代理的实现

6.  RPC中的代理模式


九、状态模式高阶详解

1.  每天都遇到的实现其实不简单 – 电梯按钮的实现

2.  动作视角 ->状态变化

3.  状态视角 ->映射所有动作

4.  使用状态来实现同一个动作的多态

5.  状态模式与策略模式:孪生兄弟

状态模式的实例,权限审批流程


十、装饰者模式高阶详解

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

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

3.  装饰者模式及其概念

4.  装饰者模式的应用

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

6.  多数据源问题的分析设计过程

7.  多数据源的设计与实现

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

9.  商城收银系统期初的设计

10. 混合策略的设计与实现

11. 多层装饰者的设计与实现

12. 重新理解里氏替换原则

13. 透明的功能扩展

14. 里氏替换原则

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


十一、 解释器模式高阶详解

1.  灵活的查询接口设计

2.  查询里需要解决的问题,条件组合

3.  AST查询语法树的建立

4.  如何使用组合模式统一查询条件

5.  如何使用解释器模式,构建查询语法树

6.  使用统一的方式递归分析查询表达式

解释器模式的灵活运用


十二、其他设计模式典型案例

1.  观察者模式:JobHunter的情景剧

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

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

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

5.  构建器模式:SQL Builder的设计

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

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

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

Day2


十三、重构到模式-

1.  设计坏味道概述

2.  重构思想

3.  理解如何结合重构和模式;

4.  用模式导向的重构(pattern-directed refactoring)改善既有代码的设计;

5.  找出需要进行模式导向重构的代码段;

6.  了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。

7.   一组坏味 (也就是问题),表示需要进行模式导向的重构;

8.   实现同一模式的不同方式的示例;

9.   什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。

10.  常见设计模式的重构演化的过程


十四、重构至模式训练营2 – 用 State 替换状态改变条件语句

1.  如何设计电梯按钮的后台逻辑

2.  该从什么角度考虑问题:行为还是对象

3.  实战:遗留代码重构 – 权限判断模块

4.  关键重构方法:ReplaceCodewithClass, ExtractSub-Class,MoveMethod,EncapsulateField


十五、重构至模式训练营3 – 用 Command 替换条件调度

1.  如何设计针对谓词的服务端

2.  RESTful   API 处理程序的整体结构

3.  实战:遗留代码重构 – 调度模块重构

4.  关键重构方法:ExtractMethod,ExtractClass, ExtractSuper-Class




返回上一级