review 總結
review 好文整理
- 代碼審查之最佳實踐
- CODE REVIEW中的幾個提示
- 從CODE REVIEW 談如何做技術
- 同僚1的review總結
- 同僚2的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
- 外部接口的入參及方法一定要加注釋
- 資料變更過程記錄,允許備援資料,如優惠券的使用,退款再使用記錄