【記錄】codeReview總結

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

  • 外部接口的入參及方法一定要加註釋

  • 數據變更過程記錄,允許冗餘數據,如優惠券的使用,退款再使用記錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章