在评价代码质量时,通常会有很多术语,从笼统的”写得好“,到更加专业的”易扩展“,”可读性“,“模块化”,”“鲁棒性",高内聚低耦合",”简洁",”清晰“,”优雅"等。
同时,在设计及优化代码时也会有一系列术语,”抽象“、”继承"、“多态",”面向接口编程"、“多用组合少用继承“,单一职责"、”依赖倒置“、”工厂“、”策略“、“代码规范”、重构"等。
一份高质量代码,伴随如此多特征,作为一名开发人员,该从何入手?
我们先对这些术语做一些分类总结。
第一类,评价代码质量术语(特征),从笼统到具体,从整体到局部,有很多维度可以评价,语言十分丰富。我们可以从中选取少量常用且重要的评价标准,作为日常Code Reivew的标准,包括可维护性、可读性、可扩展性、灵活性、简洁性、可复用性、可测试性。
第二类,设计及优化代码术语,是为了写出满足第一类评价术语而产生的,可细化、落地为五种方法论,包括面向对象设计范式、设计原则、设计模式、代码规范、重构技巧;
作为开发人员,需掌握每种方法论的实现项与代码标准之间的关系,根据需求选择方法论合适的实现。
但方法论的实现选择有很多,与之对应的代码标准关系也很难掌握,仍然没有解决从何入手的问题。
我们继续分析五种方法论,尝试从中找找入手点:
-
面向对象编程
具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础。
-
设计原则
指导代码设计的一些经验总结。[抽象]
-
设计模式
针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。
-
代码规范
主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节。
-
重构
持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。而重构的工具就是我们前面罗列的那些面向对象设计思想、设计原则、设计模式、编码规范。实际上,设计思想、设计原则、设计模式一个最重要的应用场景就是在重构的时候。
通过对五种方法论的分析,面向对象是底层实现基础,而设计原则是方法论的中转核心,从设计原则可以渗透到更加具体的设计模式、代码规范,也能为重构提供思路。(也存在设计原则渗透不到的代码规范。不过此类规范,通过代码质量插件工具,大部分都能覆盖到)。
因此,从设计原则与评价标准入手,再到具体实现类的方法论,可以简化入手点的选择。
1.明确编写/重构代码需要的主要特征(评价标准);
2.匹配与之对应的设计原则;
3.选择设计原则对应的具体实现方法论
一般复杂度的功能及小型重构(类、函数、变量),通常结向对象与代码规范足已。
复杂功能及大型重构(系统、模块、代码结构、类间关系),还需要结合设计模式总和考虑;
示例:
1.编写一个函数时,想要可读性高、易维护,单一职责的初衷就为此,具体实现可对应到代码规范-代码整洁之道-函数-只做一件事、无副作用、分割指令与询问;
2.设计一个复杂功能时,想要代码易可扩展,正是开闭原则的拿手好戏,可对应到设计模式的策略、模板;
3.重构时,不符合设计原则的地方,可以作为入手考虑点。如一个名为详情功能(Api接口/函数),同时承担了初始化、保存、详情三个功能,违反了单一职责原则,可以从此出拆分职责,提高代码的可读性和维护性。
为此,对于每一种设计原则 (单一职责,开闭原则,接口隔离,依赖倒置这四种,基本能保证代码质量下限),我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。
参考资料
《代码整洁之道》
《重构》
《设计模式之美》