Day1 | |
一、 代码与设计 1. NASA告诉我们为什么要关注代码 2. 设计与实现之间的鸿沟 3. 我们应该更加关注哪一个软件质量特性 4. 高内聚低耦合的招式与心法 -SOLID原则 5. 介绍贯穿整个课程的样例项目:次时代租车服务终端 (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. 典型的会令人误解的命名 6. 实战:SNS投票插件设计 | |
四、 开放封闭原则 1. 代码中的接线板是什么? 2. 编程价值观– 沟通,简单,灵活 3. 如何做到对扩展开放,对修改封闭 4. 次时代租车服务终端 (ARCS)的促销需求 5. 笨拙的促销实现 6. 如何不修改代码而改变它的行为 7. 最简单的 OCP实现 – 策略模式 8. 前端代码重构:拆分复杂表达式 9. 敏捷开发的精髓 – 只被第一颗子弹击中 | |
五、 程序员的自我修养 (代码的读,写,改) 1. 读代码的正确姿势 2. 报纸和代码,这两个东西怎么可能一样 3. 程序员还能不能通过代码好好的聊天了 4. 代码表面层次的改进 5. 需不需要写注释 6. 案例实战与剖析 | |
六、 重构至模式训练营1 – 用 Strategy替换条件逻辑 1. 核心重构方法:以多态取代条件表达式 2. 实战:遗留代码重构 -银行贷款计算模块 3. 关键重构方法:MoveMethod,IntroduceParameter, ExtractParameter, ReplaceConditionalwithPolymorphism | |
七、 里氏替换原则 1. 什么才是好的继承关系 2. 子类为什么要能透明的替换基类 3. 次时代租车服务终端 (ARCS)的新需求 – 电动轿车费用计算 4. 白盒复用 还是 黑盒复用 5. IS-A的精髓:针对属性还是针对行为 6. 契约式设计继承体系 7. 重构方法:提升为兄弟类 8. 前端代码重构:抽取函数 9. 如何才能让 次时代租车服务终端 (ARCS)的代码符合 LSP 10. 这样做我们可能会引入什么新的问题? | |
八、 降低代码复杂度的技巧 1. 如何优化判断与循环 2. 卫语句与代码嵌套消除 3. NullReference与 代码复杂度 4. 圈复杂度的计算方法 5. 降低嵌套的另一方法:空对象模式 | |
Day2 | |
九、 重构至模式训练营2 – 用 State 替换状态改变条件语句 1. 如何设计电梯按钮的后台逻辑 2. 该从什么角度考虑问题:行为还是对象 3. 实战:遗留代码重构 – 权限判断模块 4. 关键重构方法:ReplaceCodewithClass, ExtractSub-Class,MoveMethod,EncapsulateField | |
1. 接口隔离原则 2. 接口“变胖”的问题 – 接口污染 3. 佳能一体机的遗留接口问题 4. 如何实现接口分离 – 适配器模式 5. 类适配器 – 多继承 6. 对象适配器 – 委托 7. 使用单元测试来发现问题 8. 前端代码重构:使用模板方法重新组织逻辑 9. 次时代租车服务终端 (ARCS)在接口划分上的问题 10. 如何简化复杂的逻辑 11. 如何使用模板方法分离抽象与具体 12. 案例:ATM机接口设计的演化 | |
十、 依赖倒置原则 1. 结构化设计理念的问题 2. 对象化设计理念 3. 依赖倒置到底倒置了什么 4. 如何分离关注点 5. DI-依赖注入解决的问题:讲对象的创建与使用分离 6. 案例:消息队列设计的演化 | |
十一、 重构至模式训练营3 – 用 Command 替换条件调度 1. 如何设计针对谓词的服务端 2. RESTful API 处理程序的整体结构 3. 实战:遗留代码重构 – 调度模块重构 4. 关键重构方法:ExtractMethod,ExtractClass, ExtractSuper-Class | |
十二、 高阶程序员必会招式– 单元测试的重构 1. 单元测试代码的三部曲 2. 如何让单元测试代码更具有可扩展性 3. 最核心的问题:我们到底要测什么 4. 单元测试代码也要遵循 SRP原则 5. 不要使用 Ctrl+C&Ctrl+V写单元测试 |
课程特点
课程通过丰富的案例以及简单易记的代码准则,来帮助开发人员培养工匠意识,提升代码质量与设计内功,进而帮助软件企业降低软件开发和维护的成本。