简单问几个问题:
1)如果我有一个类a,只有一个字段x,正在构造它
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域对象是很重要的。Groovy对象抛出一个MissingPropertyException
。Grails域对象将静默地忽略额外的属性。
关于第二个问题,使用命令对象初始化grails域对象是一种常见的模式,通常是可以的。参数可能更危险一些。恶意用户可以将任何内容放入params中,因此最好显式地说明要分配的属性。否则,像时间戳和用户,甚至像注入的spring bean这样的非映射列都可能受到影响。