课程大纲
第1部分:代码结构的分析与维护
能否快速分析代码,取决于程序员的代码理解角度、代码分析技巧
内容一:VSP分析法
变量引用分析——Variable reference analysis
语句块职责分析——Statement block responsibility analysis
执行路径分析——execution Path analysis
三组优秀代码原则:变量……、语句块……、执行路径……
对比:低效的行读法
掌握代码结构规律,就能够更快地维护代码结构
内容二:维护代码结构
分析:多案例
提炼:函数拆分与合并技巧,语句块划分与重组技巧
分析:多案例
提炼:提炼抽象判断骨架的技巧,消除判断嵌套的技巧
分析:多案例
提炼:变量不数据结构的代码维护
时间宝贵,实效第一,所以人们常问:代码维护管理有哪些原则
内容三:代码维护管理原则:有理、有利、有节
洞察本质:维护的四种类型、与预防性维护本质
轻松理解:什么是重构、何时重构、代码臭味驱动的重构过程
有理原则:找到问题还不够,必须找对问题
有利原则:利于后续改bug等维护工作、加feature等扩展工作
有节原则:不求完美
在课堂上练会、务实的技能,将在工作中直接发挥价值
内容四:大案例闯关与实战操作要领
场景1:测出Bug,读代码却看不出问题
任务1:分析代码,重构和优化代码结构使代码非常易读……改bug
场景2:越是核心代码,难读难改的复杂判断逻辑越多
任务2:分析代码,维护并改迚代码结构
场景3:你,接手了一堆代码
任务3:10分钟倒计时,测测你能读懂多少程序
第2部分:OO设计的维护与扩展
OO设计师的眼里,不是只有class,而是“OO = 类 + 类层次 + 包 + 接口”
内容五:洞察OO package结构规律,分析OO设计好轻松
利于“隐喻”更快理解OO设计(OO职责模型)
类层次-类角色矩阵
class设计原则
interface设计原则
class hierarchy设计原则
package设计原则
结合源代码案例,践行软件设计的高内聚、松耦合、可扩展
内容六:OO设计的维护与扩展
如何重新规划“类职责”——【高内聚】
• 在类之间“左右”搬移函数、字段
• 在类层次内“上下”搬移字段、函数
• 移除中间人(Remove middle man)
• 分解巨大类为类层次
• 封装“数据+操作”到类
如何保持类间关系“松耦合”——【松耦合】
• 抽象出接口
• 以委托取代继承
• 将双向关联改为单向
• 引入Façade
如何做到“抽象骨架”不“扩展点”分离?——【可扩展】
• 参数化设计
• 塑造模板函数(template method)
• 消息驱动
• 表驱动
• 状态机
在课堂上练会、务实的技能,将在工作中直接发挥价值
内容七:大案例闯关与实战操作要领
场景1:经常因为设计问题诊断不准,造成维护和扩展改善不成功
任务1:小组赛,分析代码,诊断“设计级臭味”
场景2:设计的可扩展性巩
任务2:分析代码,改迚OO设计结构,提高扩展性
场景3:没有带来扩展性的“message handler结构”比比皆是,为什么?
任务3:高抽象、可扩展的“message handler结构”这么设计……
第3部分:软件架构的维护与扩展
经过多次修改,系统大了许多,架构也没人说得清了。怎么办?
内容八:如何逆向分析源代码架构呢?
探讨源代码架构的规律——1个入口 + 5种技术模块 + N个功能模块
第1步 : 入口逻辑分析
第2步 : 结构分析
第3步 : 分析一条条协作链
架构回归松耦合,重点在接口!
内容九:接口维护、及扩展接口的技巧
如何发现、并确定接口设计有问题?
• 两个容易捕获的代码表现
维护接口——【接口易用性】
• 设计更抽象接口、简化调用
• 使接口更易用、调用时丌易“用错”
扩展接口——【接口扩展性、兼容性】
• 通过 proxy 增强接口
• 通过 adapter 增强接口对接能力
在课堂上练会、务实的技能,将在工作中直接发挥价值
内容十:大案例闯关与实战操作要领
场景1:示例代码中的接口丌易用、甚至用错导致奇怪的bug
任务1:改进接口设计
场景2:给一个完整的VC++项目
任务2:明确诊断其中的接口设计问题、以及Model层和View层不分的问题
第4部分:专题
补充与题、观点分享……
内容十一:代码移植——从Windows到Linux
UI代码是不可移植的,但如何尽量减少UI重写工作量
Socket:从windows完成端口到linux epoll
补充与题、观点分享……
内容十二:定制话题:代码架构——5种技术包、与N个功能包的分离