课程简介
在经历着无比的繁荣和发展的代码环境下,程序员承受着成本或者进度的压力,又承受维护低质量的代码的压力,同时面临随时随地的需求变更,一个产品的代码质量就在这样恶性的往复里变得如履薄冰,随时可能出现严重的问题,轻则影响产品,重则影响公司。本课程对于这种情况造成的编码越来越浮躁的情绪,树立正确的编程价值观,体会大师级技术人员使用的丰富编码以及设计经验(招式),剖析背后的机制与思想(心法),点明设计与实现之间的鸿沟,阐述重构至 SRP 的方法以及Null Reference 与 代码复杂度,最后分享如何让单元测试代码更具有可扩展性
课程收益
通过丰富的案例以及简单易记的代码准则,提升代码质量与设计内功
阐述重构至 SRP 的方法以及Null Reference 与 代码复杂度
掌握让单元测试代码更具有可扩展性的方法
明确点明设计与实现之间的鸿沟
受众人群
架构设计师、技术经理、项目组长、开发人员、技术骨干、维护人员、技术支持人员或其他对重构感有兴趣的相关人员
课程周期
2天(12H)
课程大纲
标题 | 授课内容 |
第一天 | 一、代码与设计 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 写单元测试 |