只是一些高层次的,希望非常快速的问题:
1)如果我有一个带有单个字段 x 的类 A,则正在构建它
def A = new A(x:someVal, y:someVal)
完全没问题?
2)相关,以下是将命令对象的相关部分复制到域对象的好方法吗?
def domainObject = new DomainObject(commandObject.properties).
其中命令对象有额外的属性。或者应该改为:
def domainObject = new DomainObject()
domainObject.properties['prop1', 'prop2', ...] = commandObject.properties
或者 ?
谢谢
最佳答案
对于第一个问题,区分普通的 groovy 对象和 grails 域对象很重要。带有抛出 MissingPropertyException
的 Groovy 对象. Grails 域对象会默默地忽略额外的属性。
关于第二个问题,使用命令对象初始化 grails 域对象是一种常见的模式,通常可以。参数可能有点危险。恶意用户可以将任何内容放入参数中,因此最好明确说明您要分配的属性。否则,时间戳和用户之类的东西,甚至像注入(inject)的 spring bean 之类的非映射列都可能会受到影响。
关于grails - 时髦的, chalice : high level questions on extraneous properties and command objects/data binding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642992/