為什么我們需要防腐層?


網上也看到一些防腐層的優秀文章,在實際的開發項目中,不可避免的,我們也使用到了防腐層,對防腐層,簡單總結一下:

1. 防腐層的意義是什么?

防腐層隔離上游的功能,防腐層通過已有接口和外部系統交互,在內部做己方和他方模型的轉換。

簡單來說,防腐層一般為了隔離兩個系統之間的變化,防止一個系統的微小變化會影響到另外一個系統;還有一個場景,兩個系統的技術棧不一致,所以需要一層代理來兼容。

2. 防腐層的職責

(1)異常降級:對RPC可能出現的異常進行捕獲

(2)超時/重試:RPC接口的超時、重試統一管理;

(3)數據校驗:對返回值的正確性、邊界值進行校驗,進行數據的基本防御,業務代碼邊界值的解耦;

(4)接口防腐:轉換VO對象的時候,避免下游接口的修改,導致自身系統的修改;

3. 防腐層的目的

(1)代碼復用:RPC的調用場景差異化比較小,proxy層調用,提高開發效率;

(2)提供便利性:調用方可以直接調用,對RPC的結果可以直接使用,不用考慮NPE、RPC等異常;

4. 思考

防腐層要做多少事情才是合適的,而又不顯得防腐層很臃腫、很笨重?

我們平時代碼利用防腐層主要做的一些事情,如解封裝、接口檢驗、處理異常、打印日志等;很多時候處理的是一些防止過度開發的模板性代碼。

這里說到過度開發,那就會有一個問題:我們在對接第三方的時候,使用到了第三方的接口與其對應的元數據,那么第三方接口返回的元數據我們是否可以直接使用?

如果直接使用,接口發生改動,返回元數據變化,我們其實也沒能真正意義上做到解耦,除了防腐層的其他地方也還是要做改動。如果做了返回值的convert,對接接口過多的時候,這樣的防腐層會顯得很笨重,過度開發,這樣的矛盾怎么去解決?這里就涉及防腐層的一個邊界問題。

那就要說到防腐層出現的目的,最初是為了屏蔽其他系統的域模型,入參和出參是需要我們自己定義。但是每個接口都這樣處理我們這樣開發量很大,且存在不合理的地方。主要因為我們系統維護了別人域元數據的對等。

這個邊界,可以這么理解:

如果依賴的下游經常有數據變動,或者說域模型和我們自己域的域模型沒有關聯,那我們防腐層就需要進行這樣的convert,自己定義一份;如果依賴的下游比較穩定,我們直接使用也是可以的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM