代码重构之重构过长的参数列表
一、过长参数的定义
方法的参数过多,或者存在不必要的参数。
二、过长参数带来的影响
方法不易被理解和使用,方法不稳定,难以维护
三、重构方法
-
以查询或者计算取代参数:如果参数列表中的某些参数,可以通过现有的其他参数计算得出,那计算的参数就可以省略掉,比如得到一个人的出生日期就能推算出他的年龄。 如下代码是计算某个演出票的基本信息,票只有符合年龄范围才能购买,学生和儿童票有优惠。Performance对象里是演出的基本信息,里面包含了basicPrice基本票价,所以此方法可以去掉basicPrice参数,改成直接从Performance获取
/** * 获取票据信息 * * @param name 姓名 * @param age 年龄 * @param isChild 是否儿童 * @param isStudent 是否学生 * @param ageFloor 年龄上限 * @param ageCeiling 年龄下限 * @param performance 演出信息 * @param basicPrice 基本票价 * @return 票据信息 */ public String getTicketInfo(String name, int age, boolean isChild, boolean isStudent, int ageFloor, int ageCeiling, Performance performance, double basicPrice) { if ((age < ageFloor || age > ageCeiling)) { throw new IllegalArgumentException("age is out of valid range, cannot buy ticket!"); } return getPerformanceInfo(performance) + getConsumerInfo(name, age, isStudent, isChild) + getPriceInfo(isChild, isStudent, basicPrice); }
-
保持对像的完整:有时候,一个函数的参数,可能就是一个对象的成员变量,为什么不干脆用这个对象做参数呢?下面的函数中,原本是传入年龄的上限和下线,但其他地方其实有相关的对象,那干脆直接用已经定义好的对象就行了。 引入参数对象,函数中的某些参数,可以自己手动封装到一个对象中,如下,参数中有很多自动都是用户相关的信息,所以重构的时候通过新增一个用户类去简化这些参数 移动函数到合适的类,将一些参数封装到对象之后,如果某些操作是根据封装的那些字段处理的,不如把这个函数也移动到刚刚封装的对象里边。 移除标记参数,某些入参属于标记,根据入参执行两种不同的代码逻辑,可以考虑使用三目运算符简化参数
上一篇:
IDEA上Java项目控制台中文乱码