2016-01-23 49 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」語句。