Grails Command objects
Es un objeto que sirve para mapear los parámetros del request hacia un objeto y que se pasa como argumento a una acción. Un command object sirve para hacer un wrapper orientado a objetos del request y ejecutar validaciones con el fin de enviar algo más limpio al controlador.
Al command object se delega la responsabilidad de validar los datos del request y armar objetos a partir del mismo. Y se delega al controlador la responsabilidad de decidir hacia qué lugar ir.
Grails no soporta una enumeración como argumento de accion, para que haga databinding se necesita que el enum esté dentro de un command object.
Permite la definición de constraints tal como se hace en los domain class. Si el command está definido en la misma clase que el controlador, Grails automáticamente lo marca como @Validateable.
La única diferencia entre un domain class y un command object es que el command object no es persistente.
Los constraints de un command object se utilizan para validar la vista mientras que los constraints de los domain clases se utilizan además de validar la vista, para validar que se guarde correctamente el objeto sobre la base de datos.
Los command objects tienen ventaja sobre los domain objects en el databinding ya que permiten cambios en caliente mientras que el domain class hay que reiniciar en cada cambio.
Se evita con bindable: false
o declarando la propiedad transient
.
class SubmitDetailsCommand {
String previousAddress
static constraints = {
previousAddress nullable: true, bindable: false
}
}