防腐層設計模式-常用的架構設計原則


在不共享相同語義的不同子系統之間實施外觀或適配器層。 此層轉換一個子系統向另一個子系統發出的請求。 使用此模式可確保應用程序的設計不受限於對外部子系統的依賴。 此模式最先由 Eric Evans 在 Domain-Driven Design(域驅動的設計)中描述。

上下文和問題

大多數應用程序依賴於其他系統的某些數據或功能。 例如,舊版應用程序遷移到新式系統時,可能仍需要現有的舊的資源。 新功能必須能夠調用舊系統。 逐步遷移尤其如此,隨着時間推移,較大型應用程序的不同功能遷移到新式系統中。

這些舊系統通常會出現質量問題,如復雜的數據架構或過時的 API。 舊系統使用的功能和技術可能與新式系統中的功能和技術有很大差異。 若要與舊系統進行互操作,新應用程序可能需要支持過時的基礎結構、協議、數據模型、API、或其他不會引入新式應用程序的功能。

保持新舊系統之間的訪問可以強制新系統至少支持某些舊系統的 API 或其他語義。 這些舊的功能出現質量問題時,支持它們“損壞”可能會是完全設計的新式應用程序。

不僅僅是舊系統,不受開發團隊控制的任何外部系統都可能出現類似的問題。

解決方案

在不同的子系統之間放置防腐層以將其隔離。 此層轉換兩個系統之間的通信,在一個系統保持不變的情況下,使另一個系統可以避免破壞其設計和技術方法。

上圖顯示了采用兩個子系統的應用程序。 子系統 A 通過防腐層調用子系統 B。 子系統 A 與防腐層之間的通信始終使用子系統 A 的數據模型和體系結構。防腐層向子系統 B 發出的調用符合該子系統的數據模型或方法。 防腐層包含在兩個系統之間轉換所必需的所有邏輯。 該層可作為應用程序內的組件或作為獨立服務實現。

問題和注意事項

  • 防腐層可能將延遲添加到兩個系統之間的調用。
  • 防腐層將添加一項必須管理和維護的其他服務。
  • 請考慮防腐層的縮放方式。
  • 請考慮是否需要多個防腐層。 可能需要使用不同的技術或語言將功能分解為多個服務,或者可能因其他原因對防腐層進行分區。
  • 請考慮如何管理與其他應用程序或服務相關的防腐層。 如何將其集成到監視、發布和配置進程中?
  • 確保維護並可以監視事務和數據一致性。
  • 請考慮防腐層是要處理不同子系統之間的所有通信,還是只需處理部分功能。
  • 如果防腐層是應用程序遷移策略的一部分,請考慮該層是永久性的,還是在遷移所有舊功能后即會停用。

何時使用此模式

在以下情況下使用此模式:

  • 遷移計划為發生在多個階段,但是新舊系統之間的集成需要維護。
  • 兩個或更多個子系統具有不同的語義,但仍需要進行通信。

如果新舊系統之間沒有重要的語義差異,則此模式可能不適合。


免責聲明!

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



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