review 總結
review 好文整理
個人review總結:
- if else 簡化
修改前:
class Demonstration {
// 待優化
public void function() {
if(boolean1) {
// doSth1
} else {
if(boolean2) {
// doSth2
} else {
// doSth3
}
}
}
// 優化後
public void function(){
if(boolean1) {
// doSth1
return;
}
if(boolean2) {
// doSth2
return;
}
// doSth3
}
}
-
對外接口返回值,不要直接返回數組,不宜擴展
-
方法只做一件事,短小,讓代碼主幹更清晰!
-
一些builder方法寫在實體內,避免service等方法太臃腫
-
使用繼承,提煉公共方法,避免重複方法,
-
redis鎖高於事務鎖問題
class Demonstration {
@Override
@Transactional(rollbackFor = Exception.class)
public void test() {
// 業務基本驗證
redisLock; // redis鎖
try {
if (notExist) { // 如果不存在
insert(); // 則插入
}
} finally {
releaseRedisLock; // 釋放redis鎖
}
}
}
-
定義枚舉值,如果不入庫,用字符表示更好
-
java.lang.AbstractStringBuilder.setLength(0) 瞭解下…
-
可能爲空的返回值,儘量返回Optional
-
對外接口的返回值,能返回list時,不要返回map,避免有多個key時增加接口
-
Thread.sleep修改爲TimeUnit.sleep 更能表達清楚休眠的時間
-
增加狀態碼返回,而非直接拋出異常,讓父級捕獲,容易出現太長的異常鏈
-
jdk自帶Objects類有不少好用的靜態方法,requireNonNull,isNull,equals,hashCode生成函數等
-
所有非業務邏輯的實現,都可以考慮抽象成工具方法或者某種結構的處理。比如list的合併。
-
對於不需要對await有時間需求的CountDownLatch,用ExecutorService.submit()更好
-
複雜對象傳遞,不要用字符串拼接,也許最終入庫是json或者其他格式的特殊字符串,但是程序內部要有對象,
這樣在理解和驗證的時候才方便做驗證和邏輯處理,看到別人業務代碼中的正則驗證留下了眼淚 -
利用位操作,求交併集了解下
-
TODO :rpc接口參數如何避免重複定義
-
由於類中調用內部的方法,不走代理,在需要代理的地方可以使用SpringBeanUtils.getBean(getClass())
-
【面向對象】一些簡單的對象屬性的賦值,使用工具類計算後的值等,不要放於service中,放在關聯的對象中
-
大的定時任務需要單獨於面向用戶的任務,避免帶來穩定性等的影響
-
guava工具類的使用,range,cache, RateLimiter, retryer
-
外部接口的入參及方法一定要加註釋
-
數據變更過程記錄,允許冗餘數據,如優惠券的使用,退款再使用記錄