2016-05-23 12 views
0

Ich habe eine Domäne mit n Datenquellen eingerichtet (wir nennen sie hier 2). Ich muss zur Zeit diese Weise die Objekte für Funde usw. zugreifen ...So extrahieren Sie die Datenquellenauswahl auf DRY-Art mit GORM

// DS1 
Item.find(id) 
// DS2 
Item.ds2.find(id); 

Dies funktioniert ok auf einem kleinen logischen Funktion, aber wenn es eine Menge Funde sind und speichert sie macht eine sehr un-DRY-Umgebung .. in JS.

if(isDs1){ 
    Item.find(id) 
    ... 
} 
else{ 
    Item.ds.find(id) 
    ... 
} 

ich war ...

String ds = isDs1 ? 'ds1' : 'ds2' 
Item[ds].find(id) 

Aber dies ist nicht möglich, in Groovy so etwas wie dieses denken (?)

Gibt es einen anderen Weg, dies auf ziemlich trockene Weise zu tun?

aktualisiert

für diejenigen, die meine DataSource.groovy verwechselt werden würde wie folgt aussehen ...

environments { 
    development { 
    datasource_ds1{ 
     ... 
    } 
    datasource_ds2{ 
     ... 
    } 
    } 
} 
+0

Es würde helfen, wenn Sie den Inhalt (oder den Schein des Artikels) gepostet haben. Sie können die Daten mit abfragen. 'executeQuery', findBy, FindAllBy usw. Der Ansatz, mit dem Sie Ihr Problem lösen, könnte das Problem erschweren. Warum benutzt du '' '' Item.find (id) Und danach eine Item.ds.find (id)? '' '** Item.ds ** ist auch ein Knoten? Bitte erweitern Sie die Beschreibung Ihres Problems. :] –

+0

Haben Sie schon einmal mit mehreren Datenquellen gearbeitet, die in Ihrem Datasources.groovy konfiguriert wurden? Ich werde bearbeiten, aber das ist ein Kommentar, keine Antwort. – Jackie

Antwort

2

Groovy hat für dynamischen Aufruf Unterstützung. Das Äquivalent zu Ihrem Javascript-Beispiel wäre etwa so:

String ds = isDs1 ? 'ds1' : 'ds2' 
Item."${ds}".find(id) 
+0

Yup, das wie ein Gewinner aussieht, werde ich es ausprobieren und bestätigen. Ich wusste, dass es eine Ecke von Groovy gab, die ich vermisste. Würden Sie auch sagen, dass dies der effektivste Weg ist, GORM zu verwenden? – Jackie