学习目的
- 应付面试
- 如果你是一个有追求的程序员(告别烂代码)
- 复杂代码的设计和开发能力
- 读源码,学框架事半功倍
- 职场发展
如何评判代码质量的好坏(常用评价)
-
可维护性
修改bug时候是否会破坏原有设计,是否会引入新的bug
-
可读性
任何傻瓜都会编写计算机能理解的代码,好的程序员能够编写人能够理解的代码 -------Martin Fowler
评价可读性,代码是否符合编码规范,命名是否达意,注释是否详尽,函数是否长短合适,模块划分是否清晰等等
-
可扩展性
表示代码应对未来需求变化的能力(需求的改变是不变的真理),即代码是否预留功能扩展点
-
灵活性
代码可以应付业务内的大多数场景等
-
简洁性
KISS原则:keep is Simple,Stupid
尽量保持代码简单,逻辑清晰
-
可复用性
尽量减少重复代码的编写,复用已有的代码,例如通过面向对象的继承,多态的目的之一,重构技巧之解耦,高内聚,模块化,设计原则之单一职责原则等达到最终效果
-
可测试性
容易写单元测试,TDD开发
面向对象、设计原则、设计模式、编程规范、重构之间的关系
- 面向对象
- 四大特性:封装、继承、抽象、多态
- 与面向过程的区别和联系
- 面向对象分析,面向对象设计,面向对象编程
- 接口抽象类的区别以及其各自适用场景
- 基于接口而非实现编程
- 多用组合少用继承的设计思想
- 面向过程的贫血模型和面向对象的充血模型
- 设计原则
- SOLID原则-SRP 单一职责原则
- SOLID原则-OCP 开闭原则
- SOLID原则-LSP 里氏替换原则
- SOLID原则-ISP 接口隔离原则
- SOLID原则-DIP 依赖倒置原则
- DRY原则、KISS原则、YAGNI原则、LOD法则
- 设计模式
- 创建型:单利模式、工厂模式(工厂方法和抽象工厂)、建造者模式
- 结构型:常用(代理模式、桥接模式、装饰者模式、适配器模式),不常用(门面模式,组合模式,享元模式)
- 行为性:常用(观察者、模板、策略、职责链、迭代器、状态),不常用(访问者、备忘录、命令、解释器、中介)
- 编程规范
- 命名注释参数等,主要是解决代码的可读性问题
- 代码重构
- 重构的目的、对象、时机、方法
- 保证重构不出错的技术手段:单元测试和代码的可测试性
- 两种不同规模的重构:大重构和小重构
- 联系
- 面向对象是很多设计原则、设计模式实现的基础
- 设计原则是指导代码设计的一些经验
- 设计模式是在代码设计过程中,前人总结出来的解决方案或设计思路,设计原则比设计模式更抽象
- 编程规范主要解决代码的可读性问题,相对于设计模式更加具体和偏重细节
- 重构是利用面向对象、设计原则、设计模式、编码规范等理论保持代码质量