Я ищу лучший подход для расширения функциональности генерации Grails CRUD. Это должно быть плагиным Grails, который обеспечивает дополнительные генераторы для следующих функциональных возможностей:Версии доменных имен для утверждения в Grails
- Любых изменений на расширенном экземпляре домена, должен быть сохранен (как вариант из него) для истории
- только одна версии экземпляра может быть активный
- Пользователь должен иметь возможность активировать версию экземпляра (текущий активный экземпляр должен быть отключен), который не создал им (4 глаза принцип)
- вид дифф приятно иметь
Вмешательство в Grails из сценариев коробки должно быть как можно меньше. я идентифицировал до сих пор 3 разработки стратегий осуществления:
- Зеркала таблицы с одной и той же схемой, которая содержит версии (парную графа доменов/таблиц). Активированная версия будет скопирована в собственный домен и наоборот.
- Использование дискриминатора в классе домена. Некоторые новые колонки будут добавлены в домен (например, состояние [активен, notActive], lastUpdatedBy, lastUpdatedDate ...)
- (Де-) Сериализация экземпляров в специальной области с BLOB (например, domain.properties в формате JSON)
Любое из решений имеет свои плюсы и минусы. Каков наилучший подход к его внедрению? Возможно, есть более простой способ.
Никогда не пробовал, но вы могли бы найти http://refaktor.blogspot.co.uk/2012/08/hibernate-envers-with-grails-210.html интересный? –
@tim_yates, пожалуйста, разместите его как ответ, чтобы я мог его принять. В вашем предложении используется плагин спящего режима с именем Envers. Он реализует первую стратегию, описанную в моем вопросе. Он работает нормально. Единственным недостатком является то, что изменение db должно быть внутри транзакции, что не относится к контроллеру. – Waldemar
Независимо от стратегий, это хорошая идея использовать динамические леса в Grails для их реализации. Для каждого домена вам нужны специальные функции, создайте пустой контроллер с scaffold = true. Затем установите шаблоны и измените их. Например. изменить действие списка, чтобы отфильтровать неактивные объекты. – Waldemar