发表于: 2017-12-24 21:08:55
0 457
一.今天完成的主要事情
1.对代码进行初步重构
/**
* 根据入参size计算实际获取数据的个数
*/
public static int calculateActualSize(Integer size) {
Integer result = size;
if (result == null || result <= 0) {
result = 10;
}
return result;
}
第一个方法是获取页长的方法,因为每个查询列表接口基本都有page和size参数,所以感觉这部分内容可以抽取出来提炼成一个方法,又因为获取取数据的start参数需要size参数,所以这里设计成了两个方法,一个方法获取size,另一个方法获取start参数,获取size参数的方法如上,而获取start参数的方法代码如下:
/**
* 计算根据传入的page和实际的size计算分页的起始页
*/
public static int getParameterStart(Integer page, Integer size) {
if (page == null || page <= 0) {
page = 1;
}
int start = (page - 1) * calculateActualSize(size);
if (start < 0) {
start = 0;
}
return start;
}
第二个重构的部分是校验参数是否为空的方法,因为有很多入参需要校验是否为空,如果一个一个的写,非常麻烦而且代码量很大,所以设计一个可变长度的参数列表,将需要校验是否为空的参数一次性传入,然后如果有参数为空则返回该参数在传入时的顺序,如果没有参数为空,则返回-1.
/**
* 判断传入的参数是否为空
*/
public static int isNullOrEmpty(Object... params) {
for (int i = 0; i < params.length; i++) {
if (DataUtils.isNullOrEmpty(params[i])) {
return i;
}
}
return -1;
}
这样在接口中如果需要校验多个参数是否为空就可以这样写
String[] paramNames = new String[] {"schoolId", "withdrawAmount", "schoolName", "idArray"};
int result = ParamsUtil.isNullOrEmpty(schoolId, withdrawAmount, schoolName, idArray);
if (result>= 0){
log.info("Parameter " + paramNames[result] + " can not be null");
model.addAttribute("code", -1000);
return "/common/failure";
}
原本需要多行的代码被简化成了这么几行
第三个是一个功能方法,这个方法是将数组转换成字符串,方便后续打印输出,主要是当传入的参数是一个数组时,直接调用数组的toSting()方法打印的是该数组对象的地址,起不到打印参数的作用,所以写一个转换方法,将传入的数组转换为字符串打印,目前仅提供了Long类型,后续可能优化成泛型方法,支持所有类型的数组参数.
/**
* 将数组转换为字符串
* */
public static String convertArrayToString(Long[] array) {
StringBuilder stringBuilder = new StringBuilder();
if (DataUtils.isNullOrEmpty(array))
return null;
stringBuilder.append("[");
for (int i = 0; i < array.length; i++) {
stringBuilder.append(array[i] + "");
if (i != array.length - 1) {
stringBuilder.append(", ");
}
}
stringBuilder.append("]");
return stringBuilder.toString();
}
二.明天计划完成的事情
1.继续重构代码,直到以自己的水平已经不能重构为止
三.遇到的问题
暂无
四.收获
以上
五.项目进度情况
暂无延期风险,项目进度正常
评论