Обычное приложение Grails для бэкэнда - PullRequest
2 голосов
/ 14 декабря 2011

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 14 декабря 2011

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

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

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

Редактировать:

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

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

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

1 голос
/ 14 декабря 2011

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

1 голос
/ 14 декабря 2011

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

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

0 голосов
/ 14 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...