天天看點

兩點之間直線最短,你寫的是代碼,我寫的是藝術

随着需求疊代,團隊代碼量逐漸增多,熵增嶄露頭角。臨近月底,我打開部分程式,再做一次代碼走查。

✅ 兩點之間直線最短

我在做代碼走查的時候,發現一個service方法裡有這麼一段代碼

List<PlatOrder> platOrderList = platOrderService.selectByOrderIds(Lists.newArrayList(bankOrder.getOrderId()));
    if (CollectionUtils.isEmpty(platOrderList)) {
        throw BizException.build("服務商未落單");
    }

    paymentReq.setOrigTransNo(platOrderList.get(0).getMerOrderId());      

先說一下PlatOrder對應的資料表plat_order,plat_order是平台付款訂單表,orderId是平台訂單号,字段上有唯一索引。

我看這段邏輯,直覺是為什麼調用 PlatOrderService#selectByOrderIds 方法擷取一個清單,然後再取第一個元素呢? 繞這麼一個彎兒幹啥,殊不知兩點之間直線最短。我趕緊翻一下 PlatOrderService 的方法清單。 發現果然有另一個方法 selectByOrderId 。那麼,這裡調用 selectByOrderId ,像下面這樣,是不是更優雅?

PlatOrder platOrder = platOrderService.selectByOrderId(bankOrder.getOrderId());
    Assert.notNull(platOrder, "服務商未落單");

    paymentReq.setOrigTransNo(platOrder.getMerOrderId());      

✅ 世上無易事,用心求精進

PlatOrderService 是基于 plat_order表的CRUD操作的service接口類。先說一下plat_order表,plat_order是平台付款訂單表,orderId是平台訂單号,字段上有唯一索引。

我在做代碼走查的時候,發現 PlatOrderService 裡有這麼一個方法

public interface PlatOrderService {
    
    /**
     * 根據訂單流水号查詢單條平台訂單記錄
     * @param orderId
     * @return
     */
    List<PlatOrder> selecPlatOrderByOrderId(String orderId);
}      

為什麼會有這麼一個方法呢?據我分析:①是當事人不清楚orderId的作用;②當事人迷糊、馬虎,未加思考未作了解就寫出來的;③當事人參考其他service如法炮制、信手拈來;④年久失修。

我不能再容忍這樣的方法繼續被使用。

是以,改成這樣:

public interface PlatOrderService {
    
    /**
     * 根據訂單流水号查詢單條平台訂單記錄
     * @param orderId
     * @return
     */
    default PlatOrder selectByOrderId(String orderId){
        List<PlatOrder> list = selecPlatOrderByOrderId(orderId);
        if (CollectionUtils.isNotEmpty(list)) return list.get(0);
        return null;
    }
    
    /**
     * 根據訂單流水号查詢單條平台訂單記錄
     * 不要再調用這個方法了,請使用{@link #selectByOrderId(String)}
     * @param orderId
     * @return
     */
    @Deprecated
    List<PlatOrder> selecPlatOrderByOrderId(String orderId);
}      

某天深夜,我突然一想,我的正确姿勢,應該是直接删掉這個方法,斬草要除根。上班後,立即行動。快刀斬亂麻,相關調用一并改掉。

public interface PlatOrderService {
    
    /**
     * 根據訂單流水号查詢單條平台訂單記錄
     * @param orderId
     * @return
     */
    PlatOrder selectByOrderId(String orderId);
}