重构与模式最佳实践
Owen Dai 查看讲师
百林哲咨询(北京)有限公司专家团队成员
现任职于某智能科技公司研发部总监、资深架构师,15年以上大型软件产品架构经验,负责带领团队研发计算机视觉、AI安防及大数据相关产品。擅长企业级系统架构,领域驱动设计,重构与模式。
浏览:2449次
详情 DETAILS

课程简介

在经历着无比的繁荣和发展的代码环境下,程序员承受着成本或者进度的压力,又承受维护低质量的代码的压力,同时面临随时随地的需求变更,一个产品的代码质量就在这样恶性的往复里变得如履薄冰,随时可能出现严重的问题,轻则影响产品,重则影响公司。本课程对于这种情况造成的编码越来越浮躁的情绪,树立正确的编程价值观,体会大师级技术人员使用的丰富编码以及设计经验(招式),剖析背后的机制与思想(心法),点明设计与实现之间的鸿沟阐述重构至 SRP 的方法以及Null Reference 与 代码复杂度最后分享如何让单元测试代码更具有可扩展性

课程收益

通过丰富的案例以及简单易记的代码准则,提升代码质量与设计内功

阐述重构至 SRP 的方法以及Null Reference 与 代码复杂度

掌握让单元测试代码更具有可扩展性方法

明确点明设计与实现之间的鸿沟

受众人群

架构设计师、技术经理、项目组长、开发人员、技术骨干、维护人员、技术支持人员或其他对重构感有兴趣的相关人员

课程周期

212H

课程大纲

标题

授课内容

第一天

一、代码与设计

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

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

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

4.高内聚低耦合的招式与心法 - SOLID原则

介绍贯穿整个课程的样例项目:次时代租车服务终端 (ARCS)

二、单一职责原则

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

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

3.SRP 的设计误区

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

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

6.前端代码 SRP 重构:投票组件

7.过程性代码的 SRP

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

三、代码可读性重构1:重命名

1.软件生命各周期的成本

2.好代码 与 坏代码

3.识别典型坏代码的味道 – 警惕破窗效应

4.扫雷代码的秘密 – 让名字承载更多信息

5.典型的会令人误解的命名

实战:SNS 投票插件设计

四、开放封闭原则

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

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

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

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

5.笨拙的促销实现

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

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

8.前端代码重构:拆分复杂表达式

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

五、程序员的自我修养 (代码的读,写,改)

1.读代码的正确姿势

2.报纸和代码,这两个东西怎么可能一样

3.程序员还能不能通过代码好好的聊天了

4.代码表面层次的改进

5.需不需要写注释

6.案例实战与剖析

六、重构至模式训练营1 – 用 Strategy 替换条件逻辑

1.核心重构方法:以多态取代条件表达式

2.实战:遗留代码重构 - 银行贷款计算模块

关键重构方法:Move Method,Introduce Parameter, Extract Parameter, Replace Conditional with Polymorphism

七、里氏替换原则

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

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

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

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

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

6.契约式设计继承体系

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

8.前端代码重构:抽取函数

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

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

八、降低代码复杂度的技巧

1.如何优化判断与循环

2.卫语句与代码嵌套消除

3.Null Reference 与 代码复杂度

4.圈复杂度的计算方法

降低嵌套的另一方法:空对象模式

第二天

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

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

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

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

关键重构方法:Replace Code with Class, Extract Sub-Class,Move Method,Encapsulate Field

1.接口隔离原则

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

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

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

5.类适配器 – 多继承

6.对象适配器 – 委托

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

8.前端代码重构:使用模板方法重新组织逻辑

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

10.如何简化复杂的逻辑

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

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

十、依赖倒置原则

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

2.对象化设计理念

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

4.如何分离关注点

5.DI-依赖注入解决的问题:讲对象的创建与使用分离

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

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

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

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

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

关键重构方法:Extract Method,Extract Class, Extract Super-Class

十二、高阶程序员必会招式 – 单元测试的重构

1.单元测试代码的三部曲

2.如何让单元测试代码更具有可扩展性

3.最核心的问题:我们到底要测什么

4.单元测试代码也要遵循 SRP 原则

不要使用 Ctrl+C & Ctrl+V 写单元测试



企业服务热线:400-106-2080
电话:18519192882
投诉建议邮箱:venus@bailinzhe.com
合作邮箱:service@bailinzhe.com
总部地址:
北京市-丰台区-汽车博物馆东路6号3号楼1单元902-B73(园区)
全国客户服务中心:
天津市-南开区-桂苑路15号鑫茂集团鑫茂军民园1号楼A座802-803
公众号
百林哲咨询(北京)有限公司 京ICP备2022035414号-1