评价代码质量
可维护性
所谓“代码易维护”就是指,在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或者添加代码。
如果代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等等,那就可能意味着代码易维护。
除此之外,代码的易维护性还跟项目代码量的多少、业务的复杂程度、利用到的技术的复杂程度、文档是否全面、团队成员的开发水平等诸多因素有关。
给出一个比较主观但又比较准确的感受。如果 bug 容易修复,修改、添加功能能够轻松完成,那我们就可以主观地认为代码对我们来说易维护。
可读性
我们需要看代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。
code review 是一个很好的测验代码可读性的手段。
如果你的同事可以轻松地读懂你写的代码,那说明你的代码可读性很好;如果同事在读你的代码时,有很多疑问,那就说明你的代码可读性有待提高了。
可扩展性
代码预留了一些功能扩展点,你可以把新功能代码,直接插到扩展点上,而不需要因为要添加一个功能而大动干戈,改动大量的原始代码。
面向对象、设计原则、设计模式、编码规范、重构
面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则”是很多设计模式(策略、模板等)的指导原则。
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。
编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的理论基础主要就是编程规范。
重构作为保持代码质量不下降的有效手段,利用的就是面向对象、设计原则、设计模式、编码规范这些理论。
面向对象(设计思想)
主流的编程范式或者是编程风格有三种:面向过程、面向对象和函数式编程。
掌握下面这 7 个大的知识点
- 面向对象的四大特性:封装、抽象、继承、多态
- 面向对象编程与面向过程编程的区别和联系
- 面向对象分析、面向对象设计、面向对象编程
- 接口和抽象类的区别以及各自的应用场景
- 基于接口而非实现编程的设计思想
- 多用组合少用继承的设计思想
- 面向过程的贫血模型和面向对象的充血模型
设计原则
设计原则是指导我们代码设计的一些经验总结。对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。
SOLID 原则 -SRP 单一职责原则
SOLID 原则 -OCP 开闭原则
SOLID 原则 -LSP 里式替换原则
SOLID 原则 -ISP 接口隔离原则
SOLID 原则 -DIP 依赖倒置原则
DRY 原则、KISS 原则、YAGNI 原则、LOD 法则
设计模式
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。
大部分设计模式要解决的都是代码的可扩展性问题。
这一块的学习难点是了解它们都能解决哪些问题,掌握典型的应用场景,并且懂得不过度应用。
创建型 | 结构型 | 行为型 | |
---|---|---|---|
常用 | 单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式 | 代理模式、桥接模式、装饰者模式、适配器模式 | 观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式 |
不常用 | 原型模式 | 门面模式、组合模式、享元模式 | 访问者模式、备忘录模式、命令模式、解释器模式、中介模式 |
编程规范
编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节。
重构技巧
重构的工具就是我们前面罗列的那些面向对象设计思想、设计原则、设计模式、编码规范。
在开发初期,除非特别必须,我们一定不要过度设计,应用复杂的设计模式。而是当代码出现问题的时候,我们再针对问题,应用原则和模式进行重构。这样就能有效避免前期的过度设计。
- 重构的目的(why)、对象(what)、时机(when)、方法(how);
- 保证重构不出错的技术手段:单元测试和代码的可测试性;
- 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。
需要做到的事情
- 写、读代码时,思考代码质量,代码的扩展性、可读性、可维护性、可测试性等代码质量问题,看看自己编写的代码是否符合这些质量要求,有没有需要继续优化重构的地方。
- 没有透彻理解的文章,花上一天的时间(带着思考反复读上 10 遍),把里面的代码自己实现一遍,把文章的重点内容自己思考、整理,输出成文章。
- 反反复复进行学习。看一遍理论之后,在项目中尝试实践,然后回过头来再看一遍,直到没有新的知识点可以汲取为止。
- 在公司内部努力去选择做一些有技术含量的项目,跳槽去一些知名点的互联网公司等等。
参考资料:
设计模式
细数九种常见的设计模式
浅析Typescript设计模式
设计模式
key | value |
---|---|
设计模式 | 《设计模式》《Head First设计模式》(适合入门)《Java与模式》 |
面向对象 | 《深入浅出面向对象分析与设计》 |
编程规范 | 《代码整洁之道》《代码大全》《编写可读代码的艺术》 |
重构 | 《重构》《重构与模式》《修改代码的艺术》 |