Grails - автоматическое добавление пользовательских полей (столбцов) ко всем объектам домена - PullRequest
2 голосов
/ 08 августа 2011

По умолчанию при создании класса домена автоматически добавляются столбцы «id» и «version» для всех классов домена (таблиц).Что, если я хочу добавить столбец, скажем, например, для «isChecked», и это должно быть добавлено автоматически ко всем классам домена (т. Е. Таблицам), аналогичным образом добавляются столбцы «id» и «version».Как я могу добиться этого, а также, если я не хочу иметь «isChecked» для определенного класса домена, я также должен быть в состоянии сделать это.

Как я могу сделать это в Grail 1.3.7?

Спасибо.Джей Чандран

Редактировать: Могу ли я получить больше информации?Предложенные ответы не сработали!

Ответы [ 3 ]

3 голосов
/ 08 августа 2011

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

0 голосов
/ 08 августа 2011

Вы можете сделать это, используя метапрограммирование. Код, который добавляет свойство, должен запускаться либо при закрытии doWithDynamicMethods плагина, либо из Bootstrap.groovy. При использовании подхода с плагином что-то вроде этого должно работать:

def doWithDynamicMethods = {ctx ->
  application.domainClasses
        .findAll {it.simpleName.startsWith('S')}.metaClass.each {domainMetaClass ->

    Integer fooVal = 0

    domainMetaClass.getFoo = {-> fooVal}
    domainMetaClass.setFoo = {Integer newFooVal -> fooVal = newFooVal}
  }
}

Приведенный выше код должен добавить свойство Integer foo к каждому классу домена, имя которого начинается с 'S'. Я не тестировал этот код, поэтому он, вероятно, не работает. Чтобы увидеть пример, в котором вы можете быть более уверенным:

  1. Найдите плагин, который добавляет, который изменяет классы домена (например, добавляет поле или метод)
  2. Скачать
  3. Посмотрите на код в дескрипторе плагина doWithDynamicMethods closure
  4. Копирование, вставка и адаптация к вашим потребностям
0 голосов
/ 08 августа 2011

Я бы порекомендовал создать плагин, который изменяет (добавляет свойство) артефакты вашего домена.Вы можете прочитать больше о плагинах и артефактах .Затем можно легко добавить статическое свойство (например, static nochecked = true), чтобы отфильтровать доменные артефакты, в которые вы не хотите добавлять новое свойство, как считаете нужным.

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