Как лучше всего разделить приложение Grails на веб-сервис (ы) и презентацию? - PullRequest
5 голосов
/ 03 ноября 2011

У меня довольно обычное приложение Grails.Это монолитный;хотя он несколько разбит на плагины по функциональным линиям, он встроен в единую войну за развертывание.Из-за архитектурных ограничений компании мне нужно рассмотреть возможность изоляции постоянства приложения в веб-сервисе (или серии веб-сервисов).Каков наилучший подход к разделению приложения Grails на службу персистентности и приложение презентации?

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

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

Вот сообщение в блоге , в котором есть еще некоторые подробности о том, как это реализовать.

0 голосов
/ 10 ноября 2011

У меня нет готового решения вашей проблемы, и я не верю, что оно есть.Я просто объясню решение, которое я использую, и то, что я рассмотрю в вашем случае.

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

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

Недостаток этого разделенияэто определение доменных объектов должно быть продублировано во внешнем интерфейсе.Вы можете включить проверку объектов в интерфейс или нет, но если вы их опустите, это повлияет на скорость отклика пользовательского интерфейса (запросы к REST-интерфейсу в AJAX требуют проверки в реальном времени дляполучить ошибки).В конце концов, наше приложение довольно громоздко, потому что изменение объектов в бэкэнде подразумевает изменение в интерфейсе.Кроме того, мы выполняем проверку как во внешнем интерфейсе, так и во внутреннем, и этот код не используется совместно, поэтому он должен оставаться в фазе и поддерживаться в двух местах.

Наши приложения разбиты таким образом, чтопохож на два совершенно разных приложения Grails, которые не разделяют код.Решение, которое будет работать в вашем случае, но не совсем то, что вы ищете.

В вашем случае я вижу два жизнеспособных решения для веб-интерфейса:

  • используйте клиентскую библиотеку Groovy REST для получения и отправки ваших доменных объектов непосредственно с вашего контроллера.При необходимости, упакуйте их в объекты команд, которые отражают ваши доменные объекты, чтобы вы могли поделиться кодом проверки с внутренним сервером.

  • создать что-то вроде REST GORM заменяет Hibernate запросами к вашему веб-сервису REST.Вы можете посмотреть на GORM для плагина Mongo в качестве примера того, как создать такую ​​замену GORM.

Мне нравится последняя идея, это было бы полезнообщедоступный плагин.К сожалению, его пока не существует.

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