卓越程序员—编写稳定可靠的优质代码课程
课程天数:2天
课程介绍
本课程收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总研讨,形成改进解决方案的培训教程。试图通过大量的真实案例和代码,以“魔鬼训练”式的代码训练方式让学员通过亲自动手操作来理解代码设计,编写,重构以及调试。
课程收益
本课程注重实战,采用案例贯穿方式完成实践,收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总,研讨,并最终形成培训教程。本次培训从程序员的基本编程思维开始讲解,通过大量的真实案例,贯穿了设计、编码、重构等过程,详细地介绍了各个阶段需要注意的要点以及难点,这些知识都是多年编程经验的总结,使学员尽量避免重复犯错,让代码更具健壮性。
培训对象
开发人员、项目经理、架构师、技术负责人、技术总监等;
课程大纲
第一单元 成为卓越的程序员
内容一:成为卓越的程序员----代码能力及关键因素
• 软件的核心是什么(市场?客户关系?管理?技术?需求?销售?测试?)
• 做一个优秀的程序员并不简单!
• 低头看路与抬头看天——理论与实践的结合
• 优秀代码的评价标准
• 优秀的代码,而不仅是可以运行的代码
• 劣质代码的代价
内容二:案例—通过实际项目演示优秀的代码及不佳代码
• 介绍项目背景,展现设计细想
• 阅读代码指出代码坏症状
• 重构为优秀的代码,介绍重构的思想及代码对比
内容三:养成良好的编程习惯
• 努力避免错误而不是发现改进错误
• 程序的易读性,程序编写风格的一致性
• 学习阅读别人的代码(包括优秀框架的源码),但不要盲目跟在别人后面,不要说“别人也是这么做的”,要弄清这么做的理由
• 阅读函数的实现代码有利于帮助你理解函数的功能
• 尽早发现并改正错误
• 最小权限原则(信息隐藏原则)
• 避免重复的代码,使用函数来完成
• 消除冗余的代码,删除不用的变量
• 进行防错性程序设计,但不要隐瞒错误
• 函数和功能模块的划分,功能单一,名符其实的函数
• 减少关联性,尽量不依赖外界条件
• 函数的长度,每个函数只完成它自己的任务
• 明确函数的参数,尽量不要使用多种功能的参数类型
• 设计并加入调试代码,用速度和大小换取错误检查能力
• 消去随机特性,使错误稳定再现
• 消去可能的错误隐患,不要给自己和别人犯错误的机会
第二单元:如何写出优质的代码——函数、类、模块
内容一:如何写出优质的函数——每个条目都配置案例分析
• 函数设计的原则
• 函数的参数如何设计
• 如何理解“函数要短小”的说法? —— 仅仅是因为编码规范要求吗?
• Bool型参数的危害及避免的常用技巧
• 如何处理函数中的硬编码
• 如何组织函数的流程
• 处理复杂逻辑的函数的技巧——即使业务逻辑确实很复杂!
• 如何避免复杂的if-else结构
• 如何处理“很长很复杂”的函数
• 对switch-case结构的处理
• 对try-catch结构的处理
• 如何将不同流程步骤的函数进行统一处理
内容二:如何写出优质的类——每个条目都配置案例分析
• 类的高扇入和低扇出原则
• 类中临时成员变量的危害及处理方法
• 如何处理“过大的类”
• 将类从3个维度进行分解——类的设计
• 流程控制类的设计技巧
功能实现类的设计技巧
• 设计为类与设计为类的不同对象的讨论
• 设计为成员变量与设计为类的讨论
• 处理“逻辑复杂的类”的技巧——即使业务逻辑确实很复杂!
• 类的封装性使用——高性价比的方法
内容三:类的继承、多态、抽象及案例分析
• 类的继承关系与聚合关系的选择及误用——实际案例分析,什么情况下使用类的继承,什么情况下使用类的聚合。
• 类继承中父子关系与兄弟关系的选择及误用——实际案例分析,什么情况下2个类为父子关系,什么情况应为兄弟关系。
• 子类中空函数的分析及解决方法——实际案例分析。
• 类型判断的误用——多态
• 类的多态在设计中的价值及案例分析
• 复杂的类关系设计——既继承又聚合的关系,及实际案例分析
• 如何写出抽象而可扩展的类
内容四:接口设计及案例分析——每个条目都配置案例分析
• 接口设计的要素及实例
• 接口与抽象类的区别
• 类接口与外接口——案例分析
• 如何通过接口进行边界隔离——案例分析
• 接口在系统灵活性设计中的地位及实例分析
内容五:如何写出优质的模块——每个条目都配置案例分析
• 模块划分的基本原则——超市收款系统案例
• 模块划分中,如何处理2个模块耦合的部分
• 模块设计中,如何做到统一和抽象
• 运用层模块的设计要点
• 服务层模块的设计要点
• 模型成模块的设计要点
• 实体层模块的设计要点
内容六:案例分析及练习
• 分析已有的代码,看违反上述原则与遵从上述原则的代码。
• 练习,反复训练每个原则,达到自然习得。
• 本案例学习多种代码设计原则的实际使用。
第三单元:典型情况的应对编程——理解常见模式的本质
内容一:案例---重点介绍重构基本类型依赖和对应模式
• 通过案例学习以下重构到模式手段
• 以State取代状态改变条件语句
• 以Strategy取代条件逻辑
• 以Composite取代隐含树
• 以Interpreter取代隐式语言
• 转移装饰功能到Decorator
• 用Builder封装Composite
• 重点学习案例的重构到模式的过程
内容二:案例---重点介绍重构代码重复和对应模式
• 通过案例学习以下重构到模式手段
• 构造Template Method
• 以Composite取代一/多之分
• 引入Null Object
• 用Adapter统一接口
• 用Fatory Method引入多态创建
• 重点学习案例的重构到模式的过程
内容三:案例---重点介绍重构代码过长/过大的类/方法和对应模式
• 转移聚集操作到Vistor
• 以Strategy取代条件逻辑
• 以Command取代条件调度程序
• 转移聚集操作到Collecting Parameter
• 重点学习案例的重构到模式的过程
内容四:案例---重点介绍条件逻辑过度复杂和对应模式
• 以Strategy取代条件逻辑
• 以State取代状态改变条件语句
• 转移装饰功能到Decorator
• 引入Null Object
• 以Command替换条件调度程序
• 转移聚集操作到Visitor
• 重点学习案例的重构到模式的过程
第四单元:如何达到优秀的设计
内容一:什么是好的设计以及如何预先设计实现
• 什么是好的设计和衡量的手段
• 可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标
• 灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标
• 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标
• 软件的变化分析---发现变化/封装变化/隔离变化
• 分析真实项目,如何预先设计,给我们哪些启示,我们可以学习到什么
内容二:类及函数实现实战演练
• 要点:使用类进行封装及信息隐藏,案例分析。
• 要点:对象创建及生命周期管理的原则,案例分析。
• 要点:函数、类、模块间低耦合关系的实现要点。案例分析。
• 要点:把握函数、类、模块核心职责,高内聚模及案例分析。
• 要点:用逻辑类的函数、类来组织软件,重点案例分析。
• 要点:深入分析面向对象中的多态及其使用。
• 要点:用中间连接模块来粘合核心模块,案例分析。
• 要点:抽象及间接的使用,案例分析。
• 要点:隔离不同的关注面,保护变量模式的使用及案例分析
• 编码实践中,类及函数如何实现是达到优质代码的难点,也是重点。
• 本节从多个案例进行分析, 每个要点从入门介绍到深入讨论,分析我们在项目之中是那些原因导致了没有实现这些目标.
内容三:案例—某项目设计思路分析
• 案例情况
• 演示如何发现设计坏味道,以及如何重构