總原則:I don't write them that way to start. I don't think anyone could.(我並不是一開始就會按規則寫,我想也沒人做得到) --Robert.C.Martin
1. 如果新加入了一個業務模塊,與之前的業務功能類有名稱上的衝突,需要加入部分名稱以區別時:後綴強於前綴,如:
原:UserService 新 UserService_News > News_UserService
因爲在新的模塊中,肯定不止一個類要加入_News,如果改用News_前綴,那麼用IDE輸入News_來找這個Service時,你可以預想得到這個代碼提示的列表會有多麼長吧?
2. 對於多層且富有複雜業務邏輯的代碼,使用異常處理機制要優於if語句
3. 使用try-catch時應該儘量讓異常處理與業務邏輯代碼分隔開。
code 3.1 -- 異常處理與業務邏輯混雜
public void addUser(User user){
try{
doSth1()...
if()...
else()...
doSth2()..
}catch(Exception1 e1){
..
}catch(Exception2 e2){
..
}finally{
..
}
}
code 3.2 -- 異常處理與業務邏輯分開
public void addUser(User user){
try{
//將業務邏輯處理委派到doAddUser中,此方法中主要負責對不同異常的處理
//同時try..方法命名也很貼切
tryAddUser(user);
}catch(Exception1 e1){
..
}catch(Exception2 e2){
..
}finally{
..
}
}
public void tryAddUser(User user) throws Exception1,Excepion2{ //專心處理業務邏輯,將異常拋出即可
doSth1()...
if()...
else()...
doSth2()..
}
4. 儘量避免返回null值。
4.1 在返回的List無數據時,儘量返回一個長度爲0的空List,而非null
4.2 如果方法沒有找到某一個數據(如getUserByUserId等),則拋出一個UserNoFoundException會更加清晰