2011-12-14 2 views
2

У меня есть приложение для приложений Grails AppA. И я планирую создать новое приложение приложений Grails Application App, в котором AppB практически использует те же сервисы и модели AppA.Обычное бэкэнд Приложение Grails

Как мне подойти к этому?

  1. Извлечь приложение приложения Grails AppC, которое будет иметь общие сервисы и предоставлять эту услугу в качестве удаленного/веб-сервиса/отдыха?
  2. Извлечь проект Groovy ModC, который будет банкой, содержащей общие службы и модели, и иметь AppA & AppB зависит от ModC?
  3. Просто git clone и cherry-pick теперь &?
  4. Другие предложения?

Обратите внимание, что AppA имеют некоторые ленивые нагруженные отношения вызовов (то есть entity1.entity2.entity3.propName) & ГОРМ вызовы (т.е. Entity1.get(1L)) от уровня представления (контроллеры & просмотров), а также. Хотя я могу, вероятно, оттолкнуть некоторые из них к сервисам, я обеспокоен попытками рефакторинга, чтобы ссылки на отношения из представления оставались неповрежденными (т. Е. Мне нужно было бы загружать некоторые ассоциации или создавать объекты передачи данных)

ответ

5

Способ Grails для совместного использования общих функций, утилит и еще чего-то сделать плагин, который инкапсулирует их и устанавливает в оба проекта.

Плагин может содержать все, что вы можете поместить в обычном приложении Grails - то есть модели, обслуживание, Views, Controllers, конфигурационные файлы, ресурсы под веб-приложение и т.д.

Вы можете либо отпустить его на внутренний репозиторий SVN или просто использовать его с package-plugin

Edit:

Один из способов сделать это, пока вы постоянно обновляем код, чтобы иметь его в качестве встроенного плагина. Так удалить плагин из ваших application.properties и добавить:

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

Это устраняет необходимость переустановки плагина все время. Но это касается только времени разработки.

+1

Вот что я пошел, но у меня все еще есть проблемы. Например, громоздко изменить ядро ​​и отразить его в одном AppA или AppB (то есть, я должен снова установить плагин на эти два проекта). Не говоря уже о том, что для переустановки мне потребуется указать расположение упакованного плагина. Я смотрю что-то более похожее на подход maven, в котором вы просто «mvn clean install» и другие проекты внутри одного и того же компьютера (и пользователя) увидели бы изменения автоматически. Знаете ли вы о таких средствах? –

0

Я думаю, что я поместил бы функциональность в отдельную банку и использовал ее в двух приложениях (так что ваше предложение № 2). Я бы не сделал новое приложение (предложение 1), потому что вам просто нужны некоторые услуги, а не целое веб-приложение, и я бы не сделал предложение 3, потому что службы не были бы столь же многоразовыми, как с предложением 2.

1

Вы рассмотрели возможность разделения ваших моделей и сервисов (используемых обоими приложениями) на плагин. Я думаю, что это предпочтительный путь, по крайней мере, от того, что я наблюдал за сообществом.

Вы можете взглянуть на this link. Это не совсем эквивалентно вашему делу, но должно дать вам хорошую идею для подхода плагина.

1

У меня была такая ситуация в предыдущем проекте, и мы использовали проект плагина для хранения нашей общей функциональности, и она работала очень хорошо.Я не думаю, что файл jar будет работать хорошо, поскольку, насколько я знаю, вы не сможете воспользоваться такими преимуществами, как инжекция служб автоматической проводки, домен/GORM/динамические искатели на объекты домена и т. Д.

Смежные вопросы