代码重构与优化

在软件开发过程中经常遇到这样的一件事就是,昨天写的代码今天就读不懂了.这很大的一个原因就是代码没有写注释和代码太长和逻辑很乱.前几天我看一项目中一个同事写的代码....

public String getSql(final String code, final String name, final String type) {
  // TODO Auto-generated method stub
  StringBuffer sb = new StringBuffer("select count(labo.id)  from CntCodeValueBO cnt, MdProcLabelBO labo where  ");
  if (type != null) {
   if (type.equals("")) {
    sb.append(" labo.typeId like '%" + type + "%' ");
   } else {
    sb.append(" labo.typeId = '" + type + "' ");
   }
   if (code != null) {
    sb.append(" and labo.code like '%" + code + "%'");
   }
   if (name != null) {
    sb.append(" and labo.name like '%" + name + "%'");
   }
   sb.append("and cnt.codeTypeId=21 and labo.typeId=cnt.key order by labo.id ");
  } else {
   if (code != null) {
    sb.append(" labo.code like '%" + code + "%'");
    if (name != null) {
     sb.append(" and labo.name like '%" + name + "%'");
    }
    sb.append("and cnt.codeTypeId=21 and labo.typeId=cnt.key ");
   } else {
    if (name != null) {
     sb.append(" labo.name like '%" + name + "%'");
     sb.append("and cnt.codeTypeId=21 and labo.typeId=cnt.key order by labo.id ");
    } else {
     sb.append(" cnt.codeTypeId=21 and labo.typeId=cnt.key ");
    }
   }
  }
  return sb.toString();
 }

是不是很惊叹一个方法中有7个IF 4个 ELSE 逻辑是不是很乱.不易读吧,据重构:改善既有代码的设计一书的思想:可用方法代替IF重构代码为:

public String getSql(final String code, final String name, final String type){
  StringBuffer sql = new StringBuffer("select count(labo.id)  from CntCodeValueBO cnt, MdProcLabelBO labo where  ");
  sql.append(checkType(type)+checkCode(code)+checkName(name)+" order by labo.id ");
  return sql.toString();
 }
 public String codeNoNull(String code){
  return  "and labo.code like '%" + code + "%' ";
 }
 public String nameNoNull(String name){
  return " and labo.name like '%" + name + "%' ";
 }
 public String typeNoNullAndValue(String type){
  return " cnt.codeTypeId=21 and labo.typeId=cnt.key labo.typeId like '%" + type + "%' ";
 }
 public String typeNoNullNoValue(String type){
  return " cnt.codeTypeId=21 and labo.typeId=cnt.key labo.typeId = '" + type + "' ";
 }
 public String checkType(final String type){
  if(type != null && type.equals(""))return typeNoNullNoValue(type);
  if(type != null) return typeNoNullAndValue(type);
  return " cnt.codeTypeId=21 and labo.typeId=cnt.key ";
 }
 public String checkCode(final String code){
  if(code != null) return codeNoNull(code);
  else return "";
 }
 public String checkName(final String name){
  if(name != null) return nameNoNull(name);
  else return "";
 }

这样代码就易读易维护多了...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值