還在用if-else,新的解耦方式你確定不瞭解下?
阿新 • • 發佈:2020-09-12
還在用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,但你說有沒有改進的空間,我覺得有,為什麼要改進主要有如下兩個原因:
- 耦合性太高,當增加新的業務型別時,需要修改實現的介面,不夠優雅;
- 當業務數量增多,
if-else
太多,不夠美觀
基於上面個原因,以及我愛折騰、愛探索的個性,我想改善這種狀況,當然也從側面說明我的工作不夠量,竟然還有時間探索折騰