2009-09-03 61 views
6

Grails框架有許多構造/特性,允許在項目中堅持DRY原則(「不要重複自己」)。那就是:在一個特定的項目中,你很少需要重複相同的設置或代碼塊。到現在爲止還挺好。Grails項目之間的代碼重用 - 保持乾燥

但是,我和Grails一起工作的越多,我發現我越重複代碼,而不是在同一個項目中,但在項目之間。這就是項目A有控制器,GSP和圖像與項目B重疊。這是維護的噩夢,因爲項目A中的錯誤修復也必須在項目B中修復等。

我想採取DRY通過不重複我的項目之間的代碼到下一個級別。

我的問題:您如何在自己的內部Grails項目中解決這個問題(違反了「項目間DRY」)?

請注意具體/具體。如果可能的話,嘗試在實踐中包含特定的代碼示例以說明如何解決它。

回答

5

我同意李,使用common/shared插件可能是最好的方法。在我工作的某個地方,出於這個原因,我們有很多內部插件。

最常見的模式是將您的常用域對象放入它們自己的插件中。這對於域類或服務非常有效。我們並沒有將控制器,視圖和靜態資源重構爲一個插件,但是同樣的原則應該適用。

長話短說:重用Grails artifacts =使用插件。

7

編寫自定義插件是最好的方法。您不需要將其發佈到公共存儲庫,因爲您可以在自己的網絡中的某處使用私有存儲庫。

我還沒有足夠的重複代碼來取出一個插件(我的項目中重複的大部分代碼似乎都被各種公共插件覆蓋),但插件可以像一些常見的域一樣簡單課程或服務。

0

爲了增加李和科林的觀點,這兩個觀點都是有效的,我認爲從多個插件的角度來看可以產生其他好處。

例如,您可以將應用程序的功能分成多個部分,並讓不同的人員對它們進行操作。或者,如果您需要對應用程序有兩層訪問權限 - 用戶級別和管理員 - 如果您的域模型位於單獨的插件中(如Colin建議的那樣),則可以在部署期間生成結果,您可以輕鬆構建兩個應用程序並單獨部署它們。對於我的應用程序,我有幾個特定於我的項目的插件 - 域類插件,一個是用於導入數據的一堆代碼(我可以輕鬆地在我的網站上運行),一些其他插件用於繪製和自定義腳手架。這需要更多的思考,但我希望這種保理能夠在未來帶來紅利,因爲我們可以爲團隊帶來更多的人。