Domanda

Così abbiamo 'codici' unici per alcuni dei nostri oggetti Grails (dati ref), e quando vogliamo recuperarli, lo facciamo chiamandoli con il loro codice statico:

Currency.findByCode(Currency.DOLLAR)

Forse sono completamente sbagliato, ma questo mi sembra un modo molto prolisso e non scanalati di recuperare gli oggetti (soprattutto quando si hanno a che fare più volte, per più oggetti).

C'è un approccio più accettato (forse avere un riferimento all'oggetto stesso da qualche parte)? Se questo è il modo migliore per farlo, che è una risposta accettabile. Grazie.

È stato utile?

Soluzione

Dipende. Questo mi sembra i dati di riferimento. Se i dati di riferimento non è mai cambierà, non vorrei usare il livello di persistenza a tutti -. Vorrei codificare un mazzo di variabili statiche che sono i dati di riferimento statici

Se si vuole essere in grado di modificare i dati di riferimento senza ridistribuendo, il modo più pratico sarebbe quello di caricarli dal db. Si potrebbe avere un qualche tipo di schermo di amministrazione dove si poteva manipolare i dati. Si potrebbe utilizzare la cache di 2 ° livello come EHCache al limite di quanto il livello di persistenza in realtà ha colpito il db - si può ottenere davvero buone prestazioni in questo modo. Vedere la sezione 5.5.2.2 del manuale d'uso.

Tuttavia, con il vostro approccio attuale si dovrebbe ridistribuire su un cambiamento nei dati di riferimento, perché la necessità Currency.DOLLAR da codificare in. Probabilmente sarebbe bello non avere a che fare.

Altri suggerimenti

Un altra cosa che si potrebbe fare per ridurre il codice se si utilizza variabili statiche è quello di utilizzare le importazioni statiche (questo è in realtà parte di Java, ma non ho trovato finché mi sono trasferito a groovy):

Se fate un'importazione statica di CurrencyType (potenzialmente un enum tenendo i vari tipi di valuta che hai definito) nella parte superiore della classe:

static import com.example.CurrencyType.*

Giù nel codice, non è più necessario anteporre tutti i riferimenti con CurrencyType, si può semplicemente fare:

Currency.findByCode(DOLLAR)

Se non hanno bisogno di cambiare, si potrebbe anche aggiungere un metodo di supporto alla classe di valuta per recuperarlo:

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

Ciò permetterà di utilizzare Currency.dollar nel vostro altro codice. In queste classi, si potrebbe anche usare un importazione statica lì per fare riferimento solo a dollar:

static import com.example.Currency.*
....
println dollar // gets the dollar from the db and prints it out
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top