这样的代码重构有必要么

还是学习吧 发布于 2013/08/29 10:53
阅读 471
收藏 0

各位大大好,新人有问题请问各位老师。。

问题描述:有三个方法,返回值相同的。例如

A

      public String getItByName(String name){

}

B

      public String getItBySex(String Sex){

}

C

      public String getItByAge(String Age){

}


现在需要重构为一个方法么?



重构后的方法如下:

public String getIt(Object obj){

}


但是重构后的方法,感觉很奇怪。调用者不这道这个方法具体含义了。请问有必要么。


加载中
0
王涛
王涛
public Object getIt(String name){
}
冷血
冷血
回复 @还是学习吧 : 如果公司有开发规范,还是遵循开发规范吧。如果没有参考下其它人的代码吧。单就这个问题来说,怎么写意义都不大。关键你是新人。
还是学习吧
还是学习吧
不是这样的,人家说应该把所有参数组成对象。这样减少代码量。。但是我觉得,这样是逻辑更混乱。方法不止所以然了,关键我是新人。和人家比起来。很害怕,不敢当面反驳。
0
loyal
loyal
这个问题要具体考虑,如果name一定不和age|sex相同的话,那就无所谓了,你都取,看哪个能取出来就行了...public  Object get(String name){....}
还是学习吧
还是学习吧
帖子写错了,三个方法出入按的参数肯定一样。。老员工的意思是,将几个不同的参数,组合为一个参数对象(Map),然后将三个方法写为一个。
0
mingkaidox
mingkaidox
这个,三个函数都是传入的String,那么你合并成一个之后怎么区分它们的?(就是怎么区分到底是想getItBy什么。。
mingkaidox
mingkaidox
回复 @还是学习吧 : 不过,如果他们内部执行都差不多的话,你可以把里面执行的东西单独提取出一个函数来。
mingkaidox
mingkaidox
回复 @还是学习吧 : 恩,所以应该不用合并吧。。
还是学习吧
还是学习吧
嗯,我不同意的原因就在这里。因为看到方法不知道具体含义。。
0
Beyond-Bit
Beyond-Bit

你这样的重构意义何在?别人看到的你的重构方法,并不知道该方法代表的含义、而且你重构的可扩展性在哪里?假若我再加一个条件查询?

还是原来的就可以了、方法明了别人一看就知道函数是干什么的、

还是学习吧
还是学习吧
@Beyond-Bit 嗯,大不了辞职。
Beyond-Bit
Beyond-Bit
回复 @还是学习吧 : 我想不通,你们的“老人”让你重构?出了问题谁负责?重构的活都是架构师来做的、重构不好,以后维护就吃大力了、
还是学习吧
还是学习吧
不是我要重构,是老员工让我改的。但是我就不同意,但是我很怕啊,你懂得。新人表示很无奈。
0
鳄鱼的眼泪
完全没有必要重构,可读性是第一位考虑的,其他什么都是屁
还是学习吧
还是学习吧
嗯。
0
王涛
王涛

跟据我在实际项目中情况来看,将很多参数封装到map里做为参数传递,在代码的可读性方面很差,你们老员工的意思我大概能猜出一二,无非就是

public String getIt(Map<String, String> parameter) {
    StringBuilder sql = new StringBuilder("select it from itTable where 1=1 ");
    for(Map.Entry<String, String> entry : parameter.entrySet()) {
      sql.append("and ").append(entry.getKey()).append(" like '%")
      .append(entry.getValue()).append("%' ");  
    }
    return (String)(getJdbcTemplate().queryForObject(sql.toString()));
}

但是这样,你不觉得可读性很差吗

R-Lu
R-Lu
其实这样做法也未尝不行,Hibernate在多个参数,就是提供map传参数的.
还是学习吧
还是学习吧
哪有时间改,关键我是新人。而且老板一般不信任新人呢。老板的思维就是老员工说的是对的。如果老员工弄不来,才会问问我们这些所谓的新人。╮(╯▽╰)╭,不想干了,我感觉国内这个行业的环境还没有在学校的好,利益永远是第一位。
还是学习吧
还是学习吧
对,他的意思就是这样的。但是我就没有这样写,人家才建议改的。最近我都忙死了,人家就看看代码,觉得不合理,让改改。
0
loyal
loyal

额..那这样呗.:

//均可传null,里面判断下.
public String get(String name,String age,String sex){...}
//map的缺点是调用者不知道key,这样的函数要么用bean,要么像这样写.

0
傅小黑
傅小黑
public String getBy(key,value)
0
小虫0302
小虫0302
遵循最小原则,一个方法只干一件事。没有必要改。
0
vvtf
vvtf
public String getIt(Map<String, String> map) {
    if(null != map.get("name")) return "name";
    else if(null != map.get("age")) return "age";
    else if(null != map.get("sex")) return "sex";
    return null;
}
vvtf
vvtf
回复 @还是学习吧 : 你来弄个case
还是学习吧
还是学习吧
还不如case语句呢
返回顶部
顶部