Manejo de parámetros de forma dinámica para relaciones uno a muchos en griales

Mi pregunta principal aquí es tratar con el mapa de pramas cuando se gestiona una relación uno a muchos dentro de una forma dinámica, así como las mejores prácticas para tratar uno a muchos al editar / actualizar un objeto de dominio a través de la forma dinámica. Las entradas para mis preguntas son las siguientes.

Me las arreglé para hackear un formulario que me permite crear los objetos de dominio que se muestran a continuación en un formulario dinámico, ya que no tiene sentido tener un formulario separado para crear números de teléfono y luego asignarlos a un contacto, tiene sentido simplemente crear todo de una forma en mi aplicación. Logré implementar algo similar a lo que pedí en miPregunta anterior (gracias por las personas que ayudaron)

class Contact{

    String firstName
    String lastName
    // ....
    // some other properties
    // ...

    static hasMany = [phones:Phone]
    static mapping = {
        phones sort:"index", cascade: "all-delete-orphan"
    }
}

class Phone{
    int index
    String number
    String type
    Contact contact

    static belongsTo = [contact:Contact]
}

Básicamente logré obtener los valores del mapa 'params' y analizarlos por mi cuenta y crear el objeto de dominio y la asociación manualmente. Es decir. No utilicé la misma lógica que se utiliza en el andamiaje predeterminado, es decir

Contact c = new Contact(params)

etc ...., simplemente recorrí todos los parámetros y diseñé a mano mis objetos de dominio y los guardé y todo funciona bien.

Mi controlador tiene bloques de código que se ven así (esto se despoja, solo para mostrar un punto)

//create the contact by handpicking params values
def cntct = new Contact()
cntct.firstName = params.firstName
cntct.lastName = params.lastName
//etc...

//get array of values for number,type
def numbers = params['phone.number']
def types =  params['phone.type']

//loop through one of the arrays and create the phones
numbers.eachWithIndex(){ num, i ->
    //create the phone domain object from 
    def phone = new Phone()
    phone.number = num
    phone.type = types[i]
    phone.index = i
    cntct.addToPhones(phone)
}

//save

Mis preguntas son las siguientes:

¿Cuál es la mejor práctica para manejar una situación así? Usar objetos de comando funcionaría en este caso, en caso afirmativo, ¿dónde puedo encontrar más información sobre esto? Todos los ejemplos que he encontrado durante mi búsqueda tratan relaciones uno a uno. no pudo encontrar un ejemplo para uno a muchos?¿Cuál es la mejor manera de lidiar con las relatiohsips de los teléfonos en este caso, en términos de agregar / quitar teléfonos al editar el objeto de contacto? Quiero decir que la lógica de creación es simple ya que siempre tengo que crear teléfonos nuevos al guardar, pero cuando se trata de actualizar un contacto, el usuario podría haber eliminado un teléfono y / o editar uno existente y / o agregar algunos teléfonos nuevos. En este momento, lo que hago es eliminar todos los teléfonos que tiene un contacto y volver a crearlos de acuerdo con lo publicado por el formulario, pero creo que esa no es la mejor manera de hacerlo, tampoco creo que repita lo existente. y comparar con los valores publicados y hacer un manual diff es la mejor manera de hacerlo, ¿hay una mejor práctica sobre cómo lidiar con esto?

Gracias, espero que las preguntas sean claras.

[editar] Solo para obtener más información, la información del teléfono se puede agregar y eliminar dinámicamente usando javascript (jquery) dentro del formulario [/ editar]

Respuestas a la pregunta(4)

Su respuesta a la pregunta