java 代码过长_22种代码坏味道之——过长函数、过大类、发散式变化、霰弹式修改...

前情回顾:

璐璐:22种代码坏味道之——重复的代码、过长的参数列表、数据泥团​zhuanlan.zhihu.com

过长函数

对于过长的方法,我们可以用Extract Method(提炼函数)进行重构。但是如果方法内有大量的参数和临时变量,它们会对你的函数提炼形成阻碍。

接下来仔细看计算税费的方法,逻辑是这样的,用优惠后的价格乘以税率就是需要缴的税,而价格超过200000的会打98折,而税率是根据排量的大小计算,1.6L排量下的为5%,1.6以上税率是10%

虽然只有几行代码,却不能一目了然的使人理解,主要是因为出现了临时变量,这时我们可以用一种重构手法——Replace Temp with Query(以查询取代临时变量)把此方法重构成如下方式。

private 

过大类

对于过大的类,可以用Extract Class(提炼类)把不同的业务抽象到其他类中;如果一个类中的某些特性只能被一部分实例使用到,可以用Extract Subclass(提炼子类)的方法,将只能由一部分实例用到的特性转移到子类中,上面的汽车类Car.java就可以提炼出两个子类。

55ef654c77a2a653dad3337d1d2fd7b1.png
//Benz

发散式变化

多个业务发生变化时,修改的都是同一个类,说明此类承担的职责过多,可以运用Extract Class(提炼类)根据业务提炼到不同的类中。

举个例子,比如一个电商系统,有一个商品类,商品类中有计算价格和查询库存等方法:

7e8b469b228c8344bb864880ff4d6cc6.png

霰弹式修改

一旦有业务修改,需要修改程序的多处,这种坏味道可以用Move Method(搬移函数)和Move Field(搬移值域)把相同业务的代码放进同一个类。

还是商品计算价格的例子,假设现在有很多种类的商品:促销商品,团购商品,秒杀商品,每种商品类中都有计算价格的方法,如下图:

715e5a791b13f0d6348f320590dbe59a.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值