什麼是面向外掛的架構?

工程 | Peter Ledbrook | 2010 年 6 月 1 日 | ...

Grails 是一個用於快速輕鬆開發 Web 應用程式的絕佳框架。你還可以訪問大量的外掛,這些外掛提供功能或使與其他系統的整合變得輕鬆愉快。這都很好,但在本文中,我想談談當你的應用程式不斷增長,你開始淹沒在控制器、域類和其他檔案的海洋中時會發生什麼。

關注點分離

軟體架構中最有用的模式之一叫做關注點分離。其思想是將與特定功能或關注點相關的所有內容分組到一個單一的、自包含的單元中。該單元中的程式碼不應承擔任何其他責任。例如,Web 服務的業務邏輯應該在一個類中,而處理 SOAP 訊息應該在另一個類中:業務邏輯和 SOAP 處理是兩個不同的關注點。

這個模式的真正美妙之處在於,你可以將這些單元聚合到更粗粒度的關注點中,因此你會在多個級別上使用該模式。例如,假設上面提到的 Web 服務提供了一個類似部落格的功能。你可以將業務邏輯、SOAP 閘道器以及可能的 REST 介面打包成一個單一的可重用單元。

在 Java 世界中,這種粗粒度功能的標準打包形式是 Java ARchive (JAR)。如果你已經是 Grails 開發者,你就會知道你的 Grails 應用程式可以使用這種 JAR 檔案。但它們在控制器、域類和其他特殊的 Grails “構件”方面並沒有幫助。幸運的是,我們有一個現成的單元可以提供幫助:Grails 外掛。

Ryan Geyer 寫了一篇很棒的文章,演示瞭如何使用外掛提供一個可重用的域模型以及為什麼你可能會這樣做。這裡是另一個用圖示形式的例子。

An example plugin-oriented architecture

我們將部落格功能打包到一個外掛中,將支付處理功能打包到另一個外掛中。這裡的想法是,多個應用程式很可能使用相同的支付處理程式碼,有些應用程式也可能需要部落格功能。你也可以打包靜態資源,以確保所有應用程式都具有一致的外觀和感覺。這就是品牌外掛的作用。這可以包括檢視、佈局和標籤庫。

Ryan 的文章展示瞭如何透過外掛安裝機制來實現這一切,但我們必須承認,這不利於快速反饋的開發週期。外掛中的每個更改都需要你打包外掛,然後將其安裝到你的應用程式中。幸運的是,還有另一種方法。

就地外掛

如果 Grails 可以直接從開發目錄載入外掛呢?這樣你就不必經過打包和安裝外掛的中間步驟了。事實上,自 Grails 1.1 起,這在某種程度上是可能的,但隨著 1.3 版本的釋出,它現在已經成熟到可以更方便地使用了。如何做到呢?很簡單。

想象一下,你在同一個目錄中有兩個並排的簡單應用程式和一個部落格外掛。

my-app
 +- blog
 +- app

要將部落格外掛包含到應用程式中,只需將此條目新增到grails-app/conf/BuildConfig.groovy:

grails.plugin.location.blog = "../blog"

必需的字首是“grails.plugin.location.”——後面的內容由你決定,但我建議你使用外掛的名稱。表示式的右側是外掛開發目錄的路徑。請注意,這可以是絕對路徑或相對路徑。

瞧!當你執行應用程式時,你將擁有部落格的所有域類、控制器、檢視等。更好的是,如果你在應用程式執行時修改了部落格的某個控制器或檢視,這些更改將自動被識別。換句話說,你就像應用程式構件一樣,可以對就地外掛構件實現自動重新載入。

因此,透過就地外掛,你可以獲得關注點分離的好處,同時也能獲得正常 Grails 開發帶來的快速反饋開發週期!

這種技術在開發外掛時效果很好,但對於多個應用程式和開發團隊之間的擴充套件性並不好。幸運的是,你可以很容易地刪除grails.plugin.location行,然後BuildConfig.groovy,將外掛釋出到內部 Maven 倉庫如這裡所述,然後透過依賴 DSL 將外掛新增為依賴項。

使用外掛將應用程式分解為可重用部分是一項極其強大和靈活的技術,它將使團隊能夠輕鬆地管理多個應用程式甚至複雜的獨立應用程式。正如你所見,Grails 透過就地外掛機制支援這種方法,該機制允許快速開發,並支援外掛依賴。最重要的是,你可以透過快速更改grails-app/conf/BuildConfig.groovy檔案,輕鬆地在兩種機制之間切換。

我希望這篇文章能啟發一些人嘗試這種技術,並從 Grails 為大型應用程式和小型應用程式帶來的生產力提升中受益。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有