2016-01-23 61 views
-2

This My DAOImple class ::::如何优化代码以摆脱我所有的其他多种条件?

这里我有两个下拉框像 1'st框选项是所有,在池中,池外。二维框选项为全部,活动,非活动,冻结,删除,删除。


public class FleetDetailsDAOImpl22 extends CustomJdbcDaoSupport implements FleetDetailsDAO { 

@Autowired 
private DataManager dataManager; 
/** This method is called for getting all the vessels. */ 

/** 
* @param vesselStatus 
* @param poolStatus 
* @param poolid 
*/ 

@Override 
public List<FleetDetails> getFleetDetails(String vesselStatus, 
     String poolStatus, int poolid, String fromDate, String toDate)throws CustomException { 

List<FleetDetails> fleetList =new ArrayList<FleetDetails>(); 
String poolStatusValue = null; 
String vesselStatusValue = null; 
String displayFlag = null; 

/*---check for poolStatus---------*/ 
if(poolStatus.equals("yes")) { 
    poolStatusValue = "Y"; 
} 
if(poolStatus.equals("no")) { 
    poolStatusValue = "N"; 
} 
if(poolStatus.equals("all")) { 
    poolStatusValue = "ALL"; 
} 
/*---check for vessel status---------*/ 

if(vesselStatus.equals("active")) { 
    vesselStatusValue = "Y"; 
    displayFlag = "Y"; 
} 
if(vesselStatus.equals("inactive")) { 
    vesselStatusValue = "N"; 
    displayFlag = "Y"; 
} 
if(vesselStatus.equals("frozen")) { 
    vesselStatusValue = "F"; 
    displayFlag ="Y"; 
} 
if(vesselStatus.equals("buried")) { 
    vesselStatusValue = "B"; 
    displayFlag = "B"; 
} 
if(vesselStatus.equals("pending")) { 
    vesselStatusValue = "P"; 
    displayFlag = "P"; 
} 
if(vesselStatus.equals("delete")) { 
    vesselStatusValue = "D"; 
    displayFlag = "D"; 
} 
if(vesselStatus.equals("all")){ 
    vesselStatusValue = "ALL"; 
} 

try { 

    if(poolStatusValue.equals("Y") && vesselStatusValue.equals("ALL")){ 

     String fleetDetailsQuery = dataManager.getQuery("FLEET_DETAILS", Queries.QUERY_GET_FLEET_DETAILS_ALL_NONPOOL); 
     Object[] params = new Object[] { poolid, poolStatusValue }; 
     fleetList = getJdbcTemplate().query(fleetDetailsQuery,params, new FleetDetails.FleetDetailsRowMapper()); 
    } 
    else if(poolStatusValue.equals("ALL") && vesselStatusValue.equals("ALL")) { 
     String allVesselsQuiry = dataManager.getQuery("FLEET_DETAILS",Queries.QUERY_GET_POOL_NONPOOL_VESSELS); 
     Object[] params = new Object[] { poolid }; 
     fleetList = getJdbcTemplate().query(allVesselsQuiry,params, new FleetDetails.FleetDetailsRowMapper()); 
    } 
    else if(poolStatusValue.equals("N")){ 
     String nonpoolVesselsQuiry = dataManager.getQuery("FLEET_DETAILS", Queries.QUERY_GET_NONPOOL_VESSELS); 
     Object[] params = new Object[] { poolid, vesselStatusValue,poolStatusValue, displayFlag }; 
     fleetList = getJdbcTemplate().query(nonpoolVesselsQuiry,params, new FleetDetails.FleetDetailsRowMapper()); 
    } 
    else if(poolStatusValue.equals("Y")){ 
     String fleetDetailsQuery = dataManager.getQuery("FLEET_DETAILS", Queries.QUERY_GET_FLEET_DETAILS); 
     Object[] params = new Object[] { poolid, vesselStatusValue,poolStatusValue, displayFlag }; 
     fleetList = getJdbcTemplate().query(fleetDetailsQuery,params, new FleetDetails.FleetDetailsRowMapper()); 
    } 
    else { 
     String fleetDetailsQuery = dataManager 
       .getQuery("FLEET_DETAILS",Queries.QUERY_GET_STATUS_VESSELS_FOR_BOTH_POOL_NONPOOL); 
     Object[] params = new Object[] { poolid, vesselStatusValue,displayFlag }; 
     fleetList = getJdbcTemplate().query(fleetDetailsQuery,params, new FleetDetails.FleetDetailsRowMapper()); 
    } 

} catch(Exception e) { 
    e.getMessage(); 
} 


    return fleetList; 
} 
+1

如果您使用的是if语句和String.equals,请这样做:“yes”.equals(poolStatus) - 当poolStatus为null时不会崩溃 – koem

+1

为什么您根据自己的状态使用Strings?考虑使用类或枚举并在那里转移一些逻辑? – qqilihq

回答

0

您使用多个if检查多的价值,而不是如果ELSEIF,这样,如果一个条件取得成功,就不会检查下一个条件,如果条件。而且,为了避免这种混淆,最好使用“SWITCH CASE”语句。