Im ищет лучший подход для расширения функций генерации Grails CRUD. Это должен быть плагин Grails, который предоставляет дополнительные генераторы для выполнения следующих функций:
- Любые изменения в расширенном экземпляре домена должны быть сохранены (в виде версии из этого) для истории
- Может быть активна только одна версия экземпляра
- Пользователь должен иметь возможность активировать версию экземпляра ( текущий активный экземпляр должен быть деактивирован), который не создан им (принцип 4 глаз)
- Учет diff хорошо иметь
Вступление в Grails из сценариев коробки должно быть как можно меньше. Я определил до сих пор 3 стратегии проектирования для реализации:
- Зеркальная таблица с той же схемой, которая содержит версии (удваивает количество доменов/таблиц). Активированная версия будет скопирована к родному домену и наоборот.
- Использование дискриминатора в классе домена. Некоторые новые столбцы будут добавлены в домен (например, состояние [active, notActive], lastUpdatedBy, lastUpdatedDate...)
- (De-) Сериализация экземпляров в специальный домен с помощью BLOB (например, domain.properties как JSON)
В любом из решений есть плюсы и минусы. Каков наилучший подход к его внедрению? Возможно, есть более простой способ.