добавить определяемые пользователем свойства в класс домена

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

Благодарность,

Мени


person Meni Lubetkin    schedule 01.08.2010    source источник


Ответы (2)


Вы можете добавить свойство Map в свой доменный класс и хранить там произвольные данные. Хотя он довольно ограничен. Он сгенерирует таблицу с ключами и значениями varchar(255), поэтому вам нужно самостоятельно управлять любыми преобразованиями типов, например.

class Thing {
   String name
   Map extraProperties = [:]
}

int age = 123
def thing = new Thing(name: 'whatever')
thing.extraProperties.age = age.toString()
thing.save()

...

def thing = Thing.get(thingId)
int age = thing.extraProperties.age.toInteger()

См. раздел «5.2.4 Наборы, списки и карты» на странице http://grails.org/doc/latest/<. /a> для краткой онлайн-документации.

person Burt Beckwith    schedule 01.08.2010

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

Я не думаю, что это возможно или желательно. Подумайте о том, что происходит, когда вы добавляете атрибут к существующему объекту предметной области в Grails. Атрибут добавляется в сопоставление ORM, что означает, что таблицы должны быть изменены. В пользовательский интерфейс добавлено еще одно текстовое поле для ввода данных; на странице списка есть еще один столбец, добавленный в его таблицу.

Когда вы добавляете атрибут, происходит много всего. Как вы будете управлять несколькими пользователями, изменяющими приложение одновременно? Что происходит, когда один пользователь изменяет таблицу, а другой обращается к старой версии?

Вы слишком много просите. Не думаю, что это разумное требование. Наибольшее преимущество Grails — быстрая разработка веб-приложений CRUD. Я не думаю, что это включает изменение пользователями во время выполнения.

person duffymo    schedule 01.08.2010
comment
это требование существует и реализовано во многих системах. так что я не думаю, что я прошу слишком много. может быть, реализация сложна, но это выполнимо - я сделал это несколько лет назад в приложении JEE, и я буду рад получить помощь и идеи от разработчиков, которые сделали это в Grails. - person Meni Lubetkin; 02.08.2010
comment
Согласен с плакатом, хотя технически это правильно, Grails - неправильная технология для этого. Вы можете написать stackoverflow.com на ассемблере, но это не будет хорошей матрицей, если принять во внимание все дополнительные усилия. - person Jared; 02.08.2010
comment
Это как спланировать создание своей жалкой репутации Thermech, делая бесполезные комментарии к ответам 2,5-летней давности? Посмотрим, ты предложишь что-нибудь получше. - person duffymo; 30.03.2013
comment
Пользовательские поля — это не бесконечно регулируемый гаечный ключ или необоснованное требование. Например, они есть во многих ORM. - person Charles Wood; 19.12.2014