2011-12-14 76 views
2

我有一個Grails應用程序AppA。我打算創建一個新的Grails應用程序AppB,其中AppB實際上使用AppA的相同服務和模型。通用後端Grails應用程序

我該如何處理?

  1. 提取一個Grails應用程序AppC,它具有公共服務並將該服務公開爲遠程/ web/rest服務?
  2. 提取一個Groovy項目ModC,它將成爲一個包含公共服務和模型的jar,並且AppA依賴於ModB?AppB &?
  3. 只是git克隆和櫻桃選擇現在每&然後呢?
  4. 其他建議?

注意APPA具有從表示層一些延遲加載關係調用(即entity1.entity2.entity3.propName)& GORM調用(即Entity1.get(1L))(控制器&視圖)爲好。儘管我可以將其中一些推回到服務中,但我擔心重構會使視圖中的關係調用保持不變(即,我需要加載一些關聯或創建數據傳輸對象)

回答

5

Grails分享常見功能和實用程序的方式是製作一個封裝它們並將其安裝到這兩個項目的插件。

一個插件可以包含任何你可以把一個普通的Grails應用程序 - 即模型,服務,瀏覽器,控制器,配置文件,在web應用程序等資源

然後,您可以其發佈到內部SVN倉庫或只是package-plugin

編輯使用它:

一種方式做到這一點,而你是不斷更新的代碼是把它作爲一個內嵌插件。所以從您的application.properties中刪除插件,並添加:

grails.plugin.location."name-of-plugin" = "/path/to/plugin/dir" // or "../plugin/" 

這消除了重新安裝插件所有的時間的必要性。但這只是開發時間。

+1

這就是我去的,但我仍然有一些問題。例如,修改內核並將其反映到一個AppA或AppB(即,我必須在這兩個項目中重新安裝該插件)很麻煩。更不用說重新安裝會要求我指出打包插件的位置。我看起來更像是一個maven方法,其中你只是`mvn clean install`它和同一臺機器(和用戶)中的其他項目會自動查看更改。你知道任何這樣的手段嗎? – 2011-12-22 07:25:25

0

我想我會把功能放到一個單獨的jar中,並在兩個應用程序中使用它(所以你的建議沒有2)。我不會創建一個新的應用程序(建議1),因爲您只需要一些服務而不是整個Web應用程序,並且我不會提出建議3,因爲這些服務不會像建議2那樣可以重用。

1

您是否考慮過將模型和服務(兩個應用程序使用的模型和服務)分離到插件中的選項。我認爲這是至少從我在社區中一直遵循的方式的首選方式。

你可以看看this link。這不完全等同於你的情況,但應該給你一個插件方法的好主意。

1

我在之前的項目中遇到過這種情況,我們使用了一個插件項目來保存我們的通用功能,並且它的工作非常好。我不認爲一個jar文件會工作得很好,因爲據我所知,你將無法利用諸如服務的自動佈線依賴注入,域對象上的域/ GORM /動態查找器等。