2013-08-13 3 views
0

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

Действительно ли это лучший подход?

Опишем его на примере: В плагине указан класс домена «org.User». Приложение переопределяет этот класс домена. Если я использую «grails run-app», тогда нет предупреждений, и это работает. Но Eclipse (GGTS) ​​жалуется на «Недопустимое определение класса дубликатов класса org.User». Для некоторых разработчиков это не имело бы значения, но мне нравится, что IDE помогает кодировать stuf как «автозаполнение».

В конце оба класса скомпилированы на загрузку класса java. Версия приложения класса загружается до версии плагина. Класс resolver находит его первым, и именно поэтому он работает. Пожалуйста, поправьте меня, если я ошибаюсь в этот момент. Действительно ли хорошая идея иметь две версии класса в одном загрузчике классов?

Каковы альтернативы?

+0

Хотя не должно быть никаких проблем, поскольку плагины скомпилированы сначала, чем приложение, в чем же необходимость переопределить класс домена в приложении? Плагин не способен делать то, что вы ожидаете от него? – dmahapatro

+0

В моем примере плагин обрабатывает все autorisation/authentification stuf. В приложении есть дополнительные поля в домене «Пользователь», которые не имеют отношения к безопасности. BTW: Расширяя Пользователь, используя наследование, есть некоторые проблемы в представлениях и контролерах. – Waldemar

ответ

1

Вы можете сделать как плагин Spring Security Core, предоставить класс User в качестве шаблона, поэтому ваше приложение, использующее этот плагин, может выбирать между созданием собственного класса или установкой пользовательского класса по умолчанию.

Пользовательский шаблон плагина here, а скрипт, ответственный за его создание, в приложении - here.

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

P.S: есть хорошие плагины безопасности, такие как Shiro и Spring Security, возможно, их проще проверить, а не создавать свои собственные.

+0

Спасибо за совет! Плагин Spring Security Core использует сценарии для генерации артефактов. Это второй вариант, описанный здесь http://grails.github.io/grails-howtos/en/pluginDevelopmentBestPractices.html#s4. Не могли бы вы сказать, что это должен быть предпочтительный способ создания артефактов плагинов? – Waldemar

+0

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

+0

Ссылки, предоставленные в этом ответе, устарели – RMorrisey

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