Las mejores prácticas - Obtener un objeto de dominio en griales por un campo estático?

StackOverflow https://stackoverflow.com/questions/4417748

  •  08-10-2019
  •  | 
  •  

Pregunta

Así que tenemos 'códigos' únicas para algunos de nuestros objetos Grails (datos ref), y cuando queremos recuperarlos, lo hacemos llamándolos con su código estático:

Currency.findByCode(Currency.DOLLAR)

Tal vez estoy completamente equivocado, pero esto parece ser una manera muy prolija y no maravilloso de recuperación de objetos (especialmente cuando tiene que hacerlo varias veces, para varios objetos).

¿Hay un enfoque más aceptado (tal vez tener una referencia al objeto en sí mismo en algún lugar)? Si esta es la mejor manera de hacerlo, es una respuesta aceptable. Gracias.

¿Fue útil?

Solución

Depende. Esto parece como datos de referencia. Si los datos de referencia no es nunca va a cambiar, yo no usaría la capa de persistencia en absoluto -. Me codificar hasta un montón de variables estáticas que son los datos de referencia estática

Si usted quiere ser capaz de cambiar sus datos de referencia sin volver a desplegar, la forma más práctica sería la de cargarlos desde el PP. Se podría tener algún tipo de pantalla de administración donde se puede manipular los datos. Se podría utilizar como segundo nivel de caché ehcache límite a la cantidad de la capa de persistencia en realidad golpeó el DB - se puede conseguir realmente un buen rendimiento de esta manera. Véase la sección 5.5.2.2 de la guía del usuario.

Sin embargo, con su enfoque actual que tendría que volver a implementar en un cambio en sus datos de referencia, debido a la necesidad Currency.DOLLAR a ser codificada en. Probablemente sería agradable no tener que hacer eso.

Otros consejos

Otra cosa que usted podría hacer para acortar el código si utiliza variables estáticas es utilizar las importaciones estáticas (esto es en realidad parte de Java, pero no se encontró hasta que me mudé Groovy):

Si usted hace una importación estática de CurrencyType (potencialmente una enumeración que sostiene los diversos tipos de moneda que ha definido) en la parte superior de su clase:

static import com.example.CurrencyType.*

Abajo en el código, que ya no necesita el prefijo todas las referencias con CurrencyType, puede simplemente hacer:

Currency.findByCode(DOLLAR)

Si no se necesitan cambio, se podría añadir también un método de ayuda a la clase de moneda para recuperarlo:

Currency.groovy:
static import com.example.CurrencyType.*
...
static transients = ['dollar']
...
static Currency getDollar() {
    Currency.findByCode(DOLLAR)
}

Eso permitirá utilizar Currency.dollar en su otro código. En esas clases, también se puede utilizar una importación estática no sólo se refieren a dollar:

static import com.example.Currency.*
....
println dollar // gets the dollar from the db and prints it out
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top