代码质量
好的代码特性:clean
- cohesive 高内聚
- loosely coupled: 松耦合,实体之间更容易测试、复用、扩展
- encapsulated: 封装良好
- Assertive 行为和依赖的数据放在一起
- Nonredundant: 无冗余,只在一个地方修复bug和进行修改
代码可维护性
- 可测性
- 函数不能太复杂
- 不能有太多参数
- 表格式不能太复杂
- 可变更性
- 源文件不能有重复代码块
- 控制流“if” 不能嵌套太深
- 类不能与其他的类耦合
- 不能使用魔数
- switch 不能有太多的case
- 可读性
- 函数不能有太行
- 代码不应该被注释
- 注释不能放在代码行的行末
差的代码
- 对象函数
- 过长函数,
- 过长参数列表 通过引入参数对象解决
- 基本类型偏执 以对象取代基本类型
- 重复的switch 用策略模式代替if/switch 用表驱动,责任链的模式
- if语句嵌套太深 抽取方法+卫语句
- 循环语句 以管道取代循环
- 对象数据
- 神秘命名
- 全局数据
- 可变数据
- 数据泥团
- 临时字段
- 纯数据类
- 对象关系
- 发散式变化 类的功能过多
- 散弹式修改 修改一个功能,需要修改多个子类
- 依恋情结 从另外对象调用了大量取值函数
- 夸夸其谈通用性 遵循合适原则,不过度设计
- 过长的消息链
- 中间人
- 内幕交易 将公共子类提炼出来
- 被拒绝的馈赠 以委托取代继承
- 其他问题
- 重复代码
- 冗余的元素
- 过大的类
- 异曲同工的类
- 注释
需要掌握的知识
- 设计模式
- 设计原则 solid原则
- 方法学 devops,极限编程,scrum,结构化分析,设计
- 实践 测试驱动开发,面向对象设计,结构化编程,函数式编程,持续集成,结对编程
设计原则
单一职责
- 依赖倒置原则
- 接口分离原则
- 接口隔离原则
- 高内聚、低耦合
- 开闭原则
- 迪米特法则
- 里氏替换原则
- 合成、聚合原则
review的书籍
- 《敏捷软件开发,原则、模式与实践》
- 《代码整洁之道》
- 《重构--改善既有代码的设计》
- 《设计模式》
- 《软件设计重构》
代码的抽象三原则
- DRY是Don't repeat yourself 的缩写,意思是"不要重复自己"。也就是说,如果多次遇到同样的问题,就应该抽象出一个共同的解决方法,不要重复开发同样的功能。
- YAGNI是You aren't gonna need it 的缩写,意思是"你不会需要它"。
- Rule of three 称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化"。它的涵义是,第一次用到某个功能时,你写一个特定的解决方法;第二次又用到的时候,你拷贝上一次的代码;第三次出现的时候,你才着手"抽象化",写出通用的解决方法。
卫语句
在计算机程序设计中,卫(guard)是布尔表达式,其结果必须为真,程序才能执行下去。卫语句(guard code或guard clause)用于检查先决条件。
卫语句可用于子进程的提前退出(early exit),这是结构化程序设计的一种常见偏离,可删除一层嵌套使得代码更扁平:把if guard { ... }替代为:if not guard: return; ....
以多态取代条件表达式
如果有一个条件表达式,根据对象类型的不同而选择不同的行为 可以将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数
fn(){
switch (_type){
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
}
}
多态最根本的好处就是:如果你需要根据对象的不同类型而采取不同的行为,多态使你不必编写明显的条件表达式。