Возможно ли каким-то образом создать признак с полями и ограничениями для этих полей, а затем создать классы домена, которые реализуют эту черту и собирают поля с ограничениями?Использование черт и ограничений с помощью объектов grails 3.x
У меня есть код, который по сути выглядит как:
trait Shared {
String sharedField
static constraints = {
sharedField nullable: true
}
}
class ImplementingClass implements Shared {
...
}
Сохранение экземпляра ImplementingClass с нулевым sharedField затем отвергнута с нарушением ограничений.
Возможно ли это? Есть ли альтернативный синтаксис, который требуется для использования ограничений и других конструкций GORM в чертах, реализуемых объектами домена?
Почему вы используете черту, чтобы добавить данные в класс ? Это не то, для чего нужны поля. Они, по сути, являются частным государством для этой цели, а не для класса внедрения. Этот аксессуар элемента «sharedField» искажается, чтобы попытаться сохранить эту приватность. – billjamesdev
Я думаю, проблема в том, что статические ограничения должны быть определены в классе домена. Я не знаю, что использовать свойства для добавления свойств в домен Grails нецелесообразно. Это одна из основных функций Traits: http://www.groovy-lang.org/objectorientation.html#_properties. Напомним, что [свойства в Groovy компилируются в частные поля с общедоступными методами get/set] (http://stackoverflow.com/a/13227508/1524502). – jonnybot
Очень разумно определять общие свойства, которые могут быть добавлены в несколько доменов. У меня есть свойство AccessControlledObject, которое определяет ряд общих свойств и логики для добавления поддержки ACL для объекта домена. Очень разумно и теоретически поддерживается чертами в соответствии с http://docs.groovy-lang.org/latest/html/documentation/core-traits.html#_properties. На практике, однако, попытка использования признаков в домене кажется катастрофой. Странные ошибки компиляции, причудливое поведение, все чрезвычайно сложно отследить. Вместо него остается надежное подклассов. –