代码不朽 - 十大可维护性原则
JAVA开发倡导的十大可维护性原则:
一、【短小的代码单元】短小的代码单元(方法和构造函数)更易于分析、测试和重用。
1.代码单元的长度应该限制在15行代码以内;
2.将长的单元分解成更短的单元
二、【简单的代码单元】拥有更少决策点的代码单元更易于分析和测试。
1.限制每个代码单元分支点的数量不超过4个;
2.将复杂的代码单元拆分成多个简单的单元
三、【不写重复代码】任何时候都应该避免源代码重复使用,因为修改时就需要对每处代码都进行修改。重复代码也是产生回归BUG(REGRESSION BUG)的一个来源。
1.不要复制代码;
2.应该编写可重用的、通用的代码,并且/或者调用已有的代码
四、【保持代码单元的接口简单】含有更少参数的代码单元(方法和构造函数)更易于测试和重用。
1.限制每个代码单元的参数不能超过4个;
2.将多个参数提取成对象
五、【分离模块之间的关注点】松耦合的模块(类)更易于修改、也利于构建更加模块化的系统。
1.避免形成大型模块,以便能达到模块之间的松耦合;
2.将不同的职责分给不同的模块,并且隐藏接口内部的实现细节
六、【架构组件松耦合】系统的顶层组件之间越是松耦合,越易于修改,也利于构建更加模块化的系统。
1.顶层组件之间应该做到松耦合;
2.尽可能减少当前模块中需要暴露给其他组件中模块的相关代码
七、【保持架构组件之间的平衡】一个平衡度很好的架构拥有不多不少的组件、统一的代码规模以及最大程度的模块化,并通过隔离关注点使得修改变得很容易。
1.需要平衡代码中顶层组件的数量和体积;
2.保持源代码中组件的数量接近于9
八、【保持小规模代码库】大型系统之所以难以维护,因为需要分析、修改并测试更多的代码。同样,大型系统中维护每一行代码的效率也比小型系统要低。
1.保持代码库规模尽可能小;
2.控制代码库的增长,并主动减少系统的代码体积;
3.功能层面控制需求蔓延、进行标准化设计;
4.技术层面不要复制粘贴代码、重构已有代码、尽量使用第三方库和拆分大型系统
九、【自动化开发部署和测试】自动化测试可以得到对修改的有效性的即时反馈。手工测试无法形成规模。
1.对代码进行自动化测试;
2.通过使用测试框架来编写自动化测试;
3.测试类型:单元测试、集成测试、端到端测试、回归测试和验收测试
十、【编写简洁的代码】代码库中存在越多的TODO、无用代码等遗留产物,新的团队就越难高效工作,从而影响维护工作效率。
1.简洁的代码是可维护的代码;
2.不应该在开发工作后留下代码坏味道(隐含着问题的代码风格):
a.不要编写单元级别的代码坏味道;
b.不要编写不好的注释;
c.不要注释代码;
d.不要保留废弃的代码;
e.不要使用过长的标识符名称;
f.不要使用魔术常量;
g.不要使用未正确处理的异常
为做到以上十项原则,相关的建议是:将原则变成实践,即遵守纪律和设定优先级;低层级原则会影响高层级原则,所以代码单元原则要高于组件原则;坚持遵守开发工作纪律,对每次提交负责。