groovy、grails:关于无关属性和命令对象/数据绑定的高级问题

groovy、grails:关于无关属性和命令对象/数据绑定的高级问题,grails,groovy,command-objects,Grails,Groovy,Command Objects,只有几个高层次的问题,希望是非常快速的问题: 1) 如果我有一个只有一个字段x的类a,它是在构造它吗 def A = new A(x:someVal, y:someVal) 完全好吗 2) 相关的,以下是将命令对象的相关部分复制到域对象的好方法吗 def domainObject = new DomainObject(commandObject.properties). 其中命令对象具有额外属性。或者应该这样做: def domainObject = new DomainObject

只有几个高层次的问题,希望是非常快速的问题:

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域对象很重要。Groovy对象抛出一个
MissingPropertyException
。Grails域对象将自动忽略额外的属性


关于第二个问题,使用命令对象初始化grails域对象是一种常见的模式,通常是可以的。Params可能更危险一点。恶意用户可以将任何内容放入参数中,因此最好明确说明要分配的属性。否则,时间戳和用户之类的事情,甚至是注入Springbeans之类的未映射列都可能受到影响。

与第二季度相关吗?太好了,谢谢你的解释。请你把最后一部分,即注入的春豆,再展开一点好吗。我对Grails还是有点陌生。再次感谢grails/spring管理的特殊对象(“Springbeans”),您只需在另一个spring管理的对象(例如控制器、域对象或服务)中定义一个具有正确名称的字段即可使用这些对象。创建对象时,将字段设置为对象。虽然将它们放在控制器中更为常见,但如果您在域对象中有其中一个,它可能会被params属性破坏。手册中有更好的解释:。