我正在尝试找到一种将动态字段添加到 grails 域类的方法。我确实根据 Burt 的文章找到了动态域类插件,但这对我们的需求来说太过分了。
假设我们有一个域类 person:
class Person extends DynamicExtendableDomainObject {
String firstName
String lastName
static constraints = {
firstName(nullable: false, blank: false, maxSize: 50)
lastName(nullable: false, blank: false)
}
}
现在客户a想在其中也有一个生日字段。通过使用某种管理工具,他在数据库中添加了这个额外的字段。
客户b还希望有一个字段中间名,因此他正在将字段中间名添加到此人。
现在我们实现了一个DynamicExtendableDomainObject
类,Person 类继承自该类。这会为每个继承自此的 Domain 类添加一个自定义字段,以将动态属性存储JSON
在其中(有点像 Perl 中的 KiokuDB 存储它们)。
现在当 Person 被实例化时,我们希望将这些动态属性添加到 Person 类中,以便能够使用标准 Grails getter 和 setter 以及用于这些的模板函数。
因此,在客户a上,我们可以使用脚手架,而人员将输出 firstName、lastName、birthDate,在客户 b 上,脚手架将输出 firstName、lastName、middleName。
属性的存储将通过使用saveinterceptor
, 将这些属性序列化为 JSON 并将它们存储在特殊字段中来实现。
但是我们还没有找到在运行时将这些 JSON 属性动态添加到域类的方法。有没有好的方法来处理这个?如果是这样,如何最好地实现这一点?