Martin Fowler 的企業級軟體架構模式 提到的幾個模式 Gateway、Facade、Adapter、Mediator 大亂鬥

Posted on 2024-03-17

Martin Fowler 的企業級軟體架構模式

這張圖是從書上面節錄出來的,這個章節主要是在講 Gateway 這個 pattern,然後因為跟一些 pattern 很像,所以就列出了相關 pattern 的比較

ChatGPT

下面是我問 ChatGPT 的結果,因為 Proxy 跟 Gateway 也蠻像的,所以我就把它放進來

用途

  • Gateway: 主要用於管理不同系統之間的通訊和流量,處理系統的輸入和輸出。
  • Facade: 主要用於將複雜系統的介面進行簡化,提供一個統一的接口,使客戶端更容易使用系統。
  • Adapter: 主要用於在不同的接口或協議之間進行轉換,使得不相容的接口可以協同工作。
  • Mediator: 主要用於解耦系統中的不同組件之間的直接通訊,通過引入一個中介者來處理組件之間的交互。
  • Proxy: 主要用於控制對象的訪問,提供一個替代或代理的介面,以控制對對象的訪問權限。

作用範圍

  • Gateway: 主要處理系統的外部通訊,處理系統與外部系統之間的交互。
  • Facade: 主要處理系統的內部結構,將系統的複雜性隱藏在一個統一的介面之後。
  • Adapter: 可以處理系統內部或外部的不相容接口,進行轉換以實現兩者之間的互操作。
  • Mediator: 主要處理系統內部組件之間的交互,通常用於降低組件之間的耦合度,提高系統的靈活性和可擴展性。
  • Proxy: 主要用於控制對象的訪問,提供一個代理的介面,可以對對象的訪問進行控制和管理。

實現方式

  • Gateway: 通常是一個單獨的元件或服務,負責處理系統的通訊。
  • Facade: 通常是一個包裝器或介面,將系統的複雜性隱藏在一個統一的介面之後。
  • Adapter: 通常是一個中間層,用於處理不相容接口之間的轉換。
  • Mediator: 通常是一個單獨的元件或服務,負責協調系統內部組件之間的交互。
  • Proxy: 通常是一個包裝器,提供一個代理的介面,用於控制對象的訪問。

相關程式碼

相關的程式碼和實作,我覺得可以參考 Refactoring.Guru 這個網站,有興趣的,也可以看一下這個網站對於這幾個 pattern 的說明,下面我先列出上面相關 pattern 的連結,

結論

我覺得實務上還是要看,目前遇到的問題是什麼 (要解決什麼問題),也就是你的 context,來決定要選擇什麼 pattern,另外,也要看 pattern 主要的用途是什麼,而不是長的很像,都可以解決問題,就隨便選一個

圖片來源:實體書。若分享內容有侵害您的圖片版權,請來信告知,我們會及時加上版權信息,若是您反對使用,本著對版權人尊重的原則,會儘速移除相關內容。

Photo by Mikołaj on Unsplash