课程简介
“这是一个最好的时代,也是一个最坏的时代”,当代的ICT行业,正在经历着无比的繁荣和发展。然而在这片繁荣之下,代码,这个ICT行业的基石,正处在越来越尴尬的境地。在犹如造星活动般不断涌现的新概念,新架构,新框架的夹击下,代码本身正在越来越被人们所忽略。
在这样的代码环境下,程序员一方面因为成本或者进度的压力,不假思索的写着丑陋的代码;另一方面又因为要去维护某位前辈留下的同样丑陋的代码而痛不欲生。再加上需求的以及开发人员的变更,一个产品的代码质量就在这样恶性的往复里变得如履薄冰,随时可能出现严重的问题。最终这些低质量的代码往往会毁掉一个产品,甚至一个公司。
为了应对对于编码越来越浮躁的情绪,作为程序员的我们该有怎样的编程价值观,该向大师级的程序员学习哪些丰富的编码以及设计经验(招式),如何了解这些招式背后的机制与思想(心法),便是本课程希望传递给大家的内容。
目标收益
1. 对于代码中常见的问题,如:逻辑不清,表述隐晦,结构混乱等,可习得一整套解决方案进行处理
2. 可迅速提高编写代码的质量,如可读性,可扩展性
3. 可熟练掌握最常见的重构方法,及设计模式
4. 深刻理解重构与模式背后的理论基础 SOLID 原则
5. 掌握敏捷开发最深刻的机理,信息时代的控制论:逐步逼近
6. 对于遗留代码的改造不再胆战心惊
培训对象
编程开发人员:希望提升代码质量、可读性和可维护性。
软件工程师:需要深入理解软件架构和设计原则,确保系统稳定性和可扩展性。
IT项目经理:需管理软件开发团队,提升整体代码质量和开发效率。
软件质量管理人员:关注代码质量和设计规范,希望引入更佳实践。
课程大纲
day1: 一、课程简介 |
1.以 SOLID 原则为主线,在微观,中观,宏观三个层面展示重构方法 2.微观层面:通过代码重构方法提升代码的可读性与业务表现力 3.中观层面:通过对于遗留代码的调整,达到重构至模式的目的,改善代码逻辑组织 4.宏观层面:通过引入更为清晰的分层架构重构,将传统三层模型演化为符合领域驱动设计的多层模型,并实现业务与技术相分离 知识点会以代码案例的形式进行展开,主要让学员针对代码案例重构前后的对比,深入理解重构的目的,手段以及可以带来的效果 |
二、代码与设计 |
6.NASA告诉我们为什么要关注代码 7.设计与实现之间的鸿沟 8.我们应该更加关注哪一个软件质量特性 9.高内聚低耦合的招式与心法 - SOLID原则 介绍贯穿整个课程的样例项目:次时代租车服务终端 (ARCS) |
三、单一职责原则 |
1.次时代租车服务终端 (ARCS) 的初步设计 2.用例 (UseCase) 的作用 – 划分边界及概览 3.SRP 的设计误区 4.重构至 SRP 的方法1:提取类 5.重构至 SRP 的方法2:Proxy 模式 6.前端代码 SRP 重构:投票组件 7.过程性代码的 SRP 违反直觉的真相:性能优化的步骤 |
四、代码可读性重构1:重命名 |
1.软件生命各周期的成本 2.好代码 与 坏代码 3.识别典型坏代码的味道 – 警惕破窗效应 4.扫雷代码的秘密 – 让名字承载更多信息 5.典型的会令人误解的命名 实战:SNS 投票插件设计 |
五、开放封闭原则 |
1.代码中的接线板是什么? 2.编程价值观 – 沟通,简单,灵活 3.如何做到对扩展开放,对修改封闭 4.次时代租车服务终端 (ARCS) 的促销需求 5.笨拙的促销实现 6.如何不修改代码而改变它的行为 7.最简单的 OCP 实现 – 策略模式 8.前端代码重构:拆分复杂表达式 敏捷开发的精髓 – 只被第一颗子弹击中 |
六、程序员的自我修养 (代码的读,写,改) |
1.读代码的正确姿势 2.报纸和代码,这两个东西怎么可能一样 3.程序员还能不能通过代码好好的聊天了 4.代码表面层次的改进 5.需不需要写注释 案例实战与剖析 |
七、重构至模式训练营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.圈复杂度的计算方法 降低嵌套的另一方法:空对象模式 |
day2: 十、重构至模式训练营2 – 用 State 替换状态改变条件语句 |
1.如何设计电梯按钮的后台逻辑 2.该从什么角度考虑问题:行为还是对象 3.实战:遗留代码重构 – 权限判断模块 关键重构方法:Replace Code with Class, Extract Sub-Class,Move Method,Encapsulate Field |
十一、接口隔离原则 |
1.接口“变胖”的问题 – 接口污染 2.佳能一体机的遗留接口问题 3.如何实现接口分离 – 适配器模式 4.类适配器 – 多继承 5.对象适配器 – 委托 6.使用单元测试来发现问题 7.前端代码重构:使用模板方法重新组织逻辑 8.次时代租车服务终端 (ARCS) 在接口划分上的问题 9.如何简化复杂的逻辑 10.如何使用模板方法分离抽象与具体 案例:ATM机接口设计的演化 |
十二、依赖倒置原则 |
1.结构化设计理念的问题 2.对象化设计理念 3.依赖倒置到底倒置了什么 4.如何分离关注点 5.DI-依赖注入解决的问题:讲对象的创建与使用分离 案例:消息队列设计的演化 |
十三、高阶程序员必会招式 – 单元测试的重构 |
1.单元测试代码的三部曲 2.如何让单元测试代码更具有可扩展性 3.最核心的问题:我们到底要测什么 4.单元测试代码也要遵循 SRP 原则 不要使用 Ctrl+C & Ctrl+V 写单元测试 |
十四、总结 | 回顾三个层面所使用的重构方法及典型案例 |
day1: 一、课程简介 1.以 SOLID 原则为主线,在微观,中观,宏观三个层面展示重构方法 2.微观层面:通过代码重构方法提升代码的可读性与业务表现力 3.中观层面:通过对于遗留代码的调整,达到重构至模式的目的,改善代码逻辑组织 4.宏观层面:通过引入更为清晰的分层架构重构,将传统三层模型演化为符合领域驱动设计的多层模型,并实现业务与技术相分离 知识点会以代码案例的形式进行展开,主要让学员针对代码案例重构前后的对比,深入理解重构的目的,手段以及可以带来的效果 |
二、代码与设计 6.NASA告诉我们为什么要关注代码 7.设计与实现之间的鸿沟 8.我们应该更加关注哪一个软件质量特性 9.高内聚低耦合的招式与心法 - SOLID原则 介绍贯穿整个课程的样例项目:次时代租车服务终端 (ARCS) |
三、单一职责原则 1.次时代租车服务终端 (ARCS) 的初步设计 2.用例 (UseCase) 的作用 – 划分边界及概览 3.SRP 的设计误区 4.重构至 SRP 的方法1:提取类 5.重构至 SRP 的方法2:Proxy 模式 6.前端代码 SRP 重构:投票组件 7.过程性代码的 SRP 违反直觉的真相:性能优化的步骤 |
四、代码可读性重构1:重命名 1.软件生命各周期的成本 2.好代码 与 坏代码 3.识别典型坏代码的味道 – 警惕破窗效应 4.扫雷代码的秘密 – 让名字承载更多信息 5.典型的会令人误解的命名 实战:SNS 投票插件设计 |
五、开放封闭原则 1.代码中的接线板是什么? 2.编程价值观 – 沟通,简单,灵活 3.如何做到对扩展开放,对修改封闭 4.次时代租车服务终端 (ARCS) 的促销需求 5.笨拙的促销实现 6.如何不修改代码而改变它的行为 7.最简单的 OCP 实现 – 策略模式 8.前端代码重构:拆分复杂表达式 敏捷开发的精髓 – 只被第一颗子弹击中 |
六、程序员的自我修养 (代码的读,写,改) 1.读代码的正确姿势 2.报纸和代码,这两个东西怎么可能一样 3.程序员还能不能通过代码好好的聊天了 4.代码表面层次的改进 5.需不需要写注释 案例实战与剖析 |
七、重构至模式训练营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.圈复杂度的计算方法 降低嵌套的另一方法:空对象模式 |
day2: 十、重构至模式训练营2 – 用 State 替换状态改变条件语句 1.如何设计电梯按钮的后台逻辑 2.该从什么角度考虑问题:行为还是对象 3.实战:遗留代码重构 – 权限判断模块 关键重构方法:Replace Code with Class, Extract Sub-Class,Move Method,Encapsulate Field |
十一、接口隔离原则 1.接口“变胖”的问题 – 接口污染 2.佳能一体机的遗留接口问题 3.如何实现接口分离 – 适配器模式 4.类适配器 – 多继承 5.对象适配器 – 委托 6.使用单元测试来发现问题 7.前端代码重构:使用模板方法重新组织逻辑 8.次时代租车服务终端 (ARCS) 在接口划分上的问题 9.如何简化复杂的逻辑 10.如何使用模板方法分离抽象与具体 案例:ATM机接口设计的演化 |
十二、依赖倒置原则 1.结构化设计理念的问题 2.对象化设计理念 3.依赖倒置到底倒置了什么 4.如何分离关注点 5.DI-依赖注入解决的问题:讲对象的创建与使用分离 案例:消息队列设计的演化 |
十三、高阶程序员必会招式 – 单元测试的重构 1.单元测试代码的三部曲 2.如何让单元测试代码更具有可扩展性 3.最核心的问题:我们到底要测什么 4.单元测试代码也要遵循 SRP 原则 不要使用 Ctrl+C & Ctrl+V 写单元测试 |
十四、总结 回顾三个层面所使用的重构方法及典型案例 |