在軟體開發中,我們經常尋求解決程式碼的可擴展性、可維護性和可測試性問題。這就是六邊形架構(也稱為“連接埠和適配器”)發揮作用的地方。
Alistair Cockburn 開發的這種方法的想法是,業務域(應用程式的核心)與系統的其餘部分隔離,並且可以獨立於外部技術(框架、資料庫、UI、外部技術)使用。 API )。
來吧,讓我們深入了解六邊形架構的基本概念,並一起看看它如何改變您設計程式碼的方式! ?
六邊形架構是一種建立應用程式的方式,使其獨立於外部細節。它透過將應用程式劃分為幾個不同的層來強調關注點分離。
目標是透過組織應用程式核心(業務邏輯)與外部世界(資料庫、使用者介面、API、框架等)之間的交互,使應用程式獨立於特定技術,所有這些都透過端口 和適配器。
將您的應用程式想像為一個六邊形,域(業務邏輯)位於中心。這個核心業務不應該直接連結到實作細節(如Symfony、Doctrine、第三方API等)。為了實現這一點,需要創建稱為端口的接口,這些接口將由適配器實現,適配器負責與外部服務的通信。
? 連接埠:換句話說,就是外界與業務核心互動的介面。連接埠是應用程式的入口或出口點(API、HTTP 請求、CLI 命令等)。
? 適配器:適配器是這些介面的具體實作。它們將外部請求或回應轉換為業務邏輯可以理解的操作。這包括與資料庫、框架、API 等的互動
為了更好地理解,我們將在 Symfony 中使用一個簡單的例子。讓我們假設您的應用程式必須允許使用者下訂單,並且它必須與資料庫互動來儲存這些訂單。
好吧,看看如何根據六邊形架構建立您的應用程式。 ?
這是應用程式的核心,該部分沒有外部相依性。這是業務邏輯所在的地方,例如建立訂單、驗證其資料等
這裡,Order 類別代表訂單的基本模型。您會注意到,此類對如何儲存或資料來自何處一無所知。
連接埠定義適配器必須實現的介面,以便業務邏輯可以運作。它們可以是進入系統的入口點(如HTTP請求)或退出點(如對資料庫的呼叫)。
OrderRepositoryInterface 介面將作為輸出埠。它只是定義了業務邏輯需要與資料庫互動的方法。域不知道如何儲存此資料。
適配器非常簡單,是連接埠的具體實作。適配器將允許您翻譯:
Adapt 這裡將對 OrderRepositoryInterface 的呼叫翻譯成與 Doctrine(資料庫管理函式庫)的交互,但你的業務邏輯不知道使用了 Doctrine。
控制器將充當我們應用程式的入口點。他透過 HTTP 請求與使用者交互,然後透過 Ports 和 Adapters.
將任務委託給網域在這裡你可以看到控制器只知道OrderRepositoryInterface接口,而不知道具體實現。這使得程式碼可測試、可擴展並且獨立於外部框架和技術(Symfony、Doctrine 等)。
透過將業務邏輯與外部實作(資料庫、HTTP、外部 API)分離,您可以讓程式碼更加靈活。更改資料庫或框架變得更簡單且風險更小。
由於業務邏輯不依賴外部元素,因此您可以輕鬆模擬或替換測試中的適配器。
透過這種清晰的分離,可以更輕鬆地添加新功能、修改行為或重複使用某些元件,而不會影響業務邏輯。
您可以透過不同類型的適配器重複使用相同的核心業務。例如,相同的業務邏輯可以用於 Web 應用程式、REST API 甚至命令列介面。
儘管六邊形架構功能強大,但以這種方式建立應用程式可能有點過大,尤其是對於小型專案。對於小型應用程序,六邊形架構可能會增加不必要的複雜性,因為並不總是需要解耦所有內容。
以上是六角形架構的發現:用於健壯且可擴展的程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!