今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor今天学习重构没怎么开窍,这有一段代码,大家帮忙Ref
今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor
今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor
?
StringBuffer sb =new StringBuffer("select d.*? from?table d where 1=1 ");
??if(vo.getC() != null && !vo.getC().equals("")){
???sb.append(" and d.c like '%"+vo.getC()+"%'");
??}
??if(vo.getT() != null && !vo.getT().equals("")){
???sb.append(" and d.t = '"+vo.getT()+"'");
??}
??if(vo.getB()!=null && !vo.getB().equals("")){
???sb.append(" and d.B like '%"+vo.getB()+"%'");
??}
??if(vo.getD()!=null && !vo.getD().equals("")){
???sb.append(" and d.d = '"+vo.getD()+"'");
??}
SQLQuery query = this.getSession().createSQLQuery(sb.toString());
?
这是一段简单的条件查询语句,vo是参数,table是数据库里的表名
?
这段代码应该怎么重构,如果以后查询条件多了该怎么办,谢谢
?
?
}
if(vo.getT() != null && !vo.getT().equals("")){
sb.append(" and d.t = '"+vo.getT()+"'");
}
if(vo.getB()!=null && !vo.getB().equals("")){
sb.append(" and d.B like '%"+vo.getB()+"%'");
}
if(vo.getD()!=null && !vo.getD().equals("")){
sb.append(" and d.d = '"+vo.getD()+"'");
}
这段提出来作为一个独立的函数,一可封装出一个独立的功能且有机会解释其作用;二可避免使两个不同的功能散落在同一个函数内。
引用
SQLQuery query = this.getSession().createSQLQuery(sb.toString());
因为这也可以看作一个功能。
至于getC,getT之类的确实可以优化一下命名,便于理解。 7 楼 Just_抱怨 2011-10-16 hyj1254 写道引用
这段提出来作为一个独立的函数,一可封装出一个独立的功能且有机会解释其作用;二可避免使两个不同的功能散落在同一个函数内。
引用
SQLQuery query = this.getSession().createSQLQuery(sb.toString());
因为这也可以看作一个功能。
至于getC,getT之类的确实可以优化一下命名,便于理解。
至于命名,是我把后面的删了,公司有保密制度,代码严禁外泄的 8 楼 hdp2010 2011-10-24 这个看你系统怎么设计,如果你组装这样的sql语句很多,完全可以写一个接口,提供将实体bean转换成一个sql语句的一部分;
interface ITransBeanToStr<T>{
String beanToSql(T obj);
}利用反射实现