天天看點

【記錄】codeReview總結review 總結

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
  • 外部接口的入參及方法一定要加注釋
  • 資料變更過程記錄,允許備援資料,如優惠券的使用,退款再使用記錄

繼續閱讀