为什么阿里巴巴Java开发手册编码规范里推荐单个方法的总行数不超过80行

该篇文章参考了:
1. 阿里巴巴《java开发手册》v1.5.0 华山版
2. 《码出高效:Java开发手册》

单个方法的总行数不超过80行

在阿里巴巴《java开发手册》v1.5.0 华山版中第十一条
推荐单个方法的总行数不超过80行
在这里插入图片描述

为什么

推荐80行呢?还是除了注释之外的?80行随便写几个if、else 不就快80行了吗?

高内聚、低耦合

把相关的功能强内聚,把弱相关的功能拆解开来, 重新抽象、重新封装。是每个方法都都遵守单一职责原则。这样也有利于方法的复用。

魔数 3

心理学认为人对事物的印象通常不能超过3 这个魔法数, 三屏是人类短期记忆的极限,而80 行在一般显示器上是两屏半的代码量。

通过对阿里代码抽样调查显示, 只有不到5% 的方法才会超过80 行, 而这些方法通
常都有明显的优化空间。

如何重构、优化代码(压缩代码到80行)

虽然开发手册只是推荐级别,但不可否认的是:谁也不能忍受方法过长,比如1000行。假设现在公司确定下来规范,单方法不能超过80行或者100行或者120行,那么如何将长行数方法重构到这个数呢?

重构、抽象、封装

按照方法单一职责,一个方法只做一件事,封装单独的方法,把相关的功能强内聚,把弱相关的功能拆解开来,这样做有两个好处:

  1. 方便后面复用方法
  2. 方便编写单测

而对于封装方法时,涉及到方法的入参,通常会纠结参数的处理,拆分的方法间需要参数传递数据。
限制参数列表过长的方式有很多, 比如包装成类、隐式传递或放在集合中等。

如果不抽取、封装,一个变量可从方法第1行使用到第1000行,虽然不用考虑方法间用参数传递数据,
 但是超过3屏,你大概率会忘了这个变量声明的意义

条件取反,减少代码缩进

方案一
// idList 可能为方法入参,也可为从数据库查询
if(!CollectionUtils.isEmpty(idList)){
     for(String id : idList){
         // do something
     }
 }
方案二
Assert.notEmpty(idList,"idList should not be empty");
if(CollectionUtils.isEmpty(idList)){
    //throw new IllegalArgumentException("idList should not be empty");
    return;
}
for(String id : idList){
    // do something
}

对比两方案,方案二比方案一减少了一层代码缩进,同时在方案二中,若入参较多,且入参校验较多时,可单独提取公共方法。

卫语句 Guard clauses

如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为卫语句

设计模式

策略模式、状态模式

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据《阿里巴巴Java开发手册》,据库的表设计允许适当冗余,以提升SQL查询的性能。这是因为在进复杂查询时,对于性能的要求更高,而冗余设计可以减少多表关联以及额外的连接操作,从而减少查询的复杂度和耗时。 在实际应用中,我们可以通过冗余设计来解决一些性能问题。首先,我们可以将常用的查询字段冗余到多个表中,以避免频繁的关联操作。这样一来,查询只需要在单个表中进,大大减少了查询的时间消耗。同时,也可以通过冗余一些聚合据,如统计据、计算据等,来减少复杂的计算过程,提升查询效率。 然而,需要注意的是冗余设计也会带来一些问题,比如据更新时需要同步多个表的据,增加了据不一致性的风险。因此,在进冗余设计时需要权衡利弊,根据具体业务场景和性能要求来决定是否进冗余。 同时,为了保持据的一致性,我们还可以采用更加严格的据库约束和事务控制来避免据异常。另外,我们也可以通过合理的索引设计、查询优化等手段来提升查询的性能,而不仅仅依赖于冗余设计。 综上所述,根据《阿里巴巴Java开发手册》,据库的表设计允许适当冗余以提升SQL查询的性能。但需要结合实际情况进权衡,避免带来据不一致性或其他问题。此外,还需要综合考虑其他性能优化手段,以达到最佳的查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值