1. 程式人生 > 實用技巧 >還在用if-else,新的解耦方式你確定不瞭解下?

還在用if-else,新的解耦方式你確定不瞭解下?

還在用if-else,新的解耦方式你確定不瞭解下?

前言

不知道各位小夥伴有沒有這樣的困惑,就是很多時候我們的業務實現很多,但是對外介面只有一個,這時候對於具體的業務我們需要根據業務編碼進行判斷,然後再根據不同的業務編碼呼叫我們的具體業務,這時候我們會用到if-else或者swatch進行判斷,大概就是這樣:

public class MyserviceImpl implements Myservice {
    
    @Autowired
    private Hadler01001ContentService service1;
    @Autowired
    private Hadler01002ContentService service2;
    @Autowired
    private Hadler01003ContentService service3;
    
    @Override
    public WrapperResponse handler(WrapperRequest request) {
        RequestHeader header = request.getHeader();
        if(header != null) {
            String businessCode = header.getBusinessCode();
            if("01001".equals(businessCode)) {
                // 處理業務01001
               return service1.handler(request);
            } else if("01002".equals(businessCode)) {
                // 處理業務01002
                return service2.handler(request);
            } else if("01003".equals(businessCode)) {
                //  處理業務01001
                return service3.handler(request);
            }

        }
        return new WrapperResponse();
    }
}

當然,你說上面這樣寫有什麼問題嗎,我覺沒有,都很ok,但你說有沒有改進的空間,我覺得有,為什麼要改進主要有如下兩個原因:

  1. 耦合性太高,當增加新的業務型別時,需要修改實現的介面,不夠優雅;
  2. 當業務數量增多,if-else太多,不夠美觀

基於上面個原因,以及我愛折騰、愛探索的個性,我想改善這種狀況,當然也從側面說明我的工作不夠量,竟然還有時間探索折騰