代码质量

59 阅读4分钟

代码质量

好的代码特性:clean

  1. cohesive 高内聚
  2. loosely coupled: 松耦合,实体之间更容易测试、复用、扩展
  3. encapsulated: 封装良好
  4. Assertive 行为和依赖的数据放在一起
  5. Nonredundant: 无冗余,只在一个地方修复bug和进行修改

代码可维护性

  1. 可测性
    • 函数不能太复杂
    • 不能有太多参数
    • 表格式不能太复杂
  2. 可变更性
    • 源文件不能有重复代码块
    • 控制流“if” 不能嵌套太深
    • 类不能与其他的类耦合
    • 不能使用魔数
    • switch 不能有太多的case
  3. 可读性
    • 函数不能有太行
    • 代码不应该被注释
    • 注释不能放在代码行的行末

差的代码

  1. 对象函数
    • 过长函数,
    • 过长参数列表 通过引入参数对象解决
    • 基本类型偏执 以对象取代基本类型
    • 重复的switch 用策略模式代替if/switch 用表驱动,责任链的模式
    • if语句嵌套太深 抽取方法+卫语句
    • 循环语句 以管道取代循环
  2. 对象数据
    • 神秘命名
    • 全局数据
    • 可变数据
    • 数据泥团
    • 临时字段
    • 纯数据类
  3. 对象关系
    • 发散式变化 类的功能过多
    • 散弹式修改 修改一个功能,需要修改多个子类
    • 依恋情结 从另外对象调用了大量取值函数
    • 夸夸其谈通用性 遵循合适原则,不过度设计
    • 过长的消息链
    • 中间人
    • 内幕交易 将公共子类提炼出来
    • 被拒绝的馈赠 以委托取代继承
  4. 其他问题
    • 重复代码
    • 冗余的元素
    • 过大的类
    • 异曲同工的类
    • 注释

需要掌握的知识

  1. 设计模式
  2. 设计原则 solid原则
  3. 方法学 devops,极限编程,scrum,结构化分析,设计
  4. 实践 测试驱动开发,面向对象设计,结构化编程,函数式编程,持续集成,结对编程

设计原则

单一职责

  1. 依赖倒置原则
  2. 接口分离原则
  3. 接口隔离原则
  4. 高内聚、低耦合
  5. 开闭原则
  6. 迪米特法则
  7. 里氏替换原则
  8. 合成、聚合原则

review的书籍

  • 《敏捷软件开发,原则、模式与实践》
  • 《代码整洁之道》
  • 《重构--改善既有代码的设计》
  • 《设计模式》
  • 《软件设计重构》

代码的抽象三原则

  1. DRY是Don't repeat yourself 的缩写,意思是"不要重复自己"。也就是说,如果多次遇到同样的问题,就应该抽象出一个共同的解决方法,不要重复开发同样的功能。
  2. YAGNI是You aren't gonna need it 的缩写,意思是"你不会需要它"。
  3. 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;
    }
}

多态最根本的好处就是:如果你需要根据对象的不同类型而采取不同的行为,多态使你不必编写明显的条件表达式。