2015-11-10 15 views
12

Sto implementando un'app che persiste i dati in alcuni punti (non correlati tra loro) utilizzando Realm. Nell'esempio:Realm: utilizza uno o più realm in un'app (e uno o più schemi)

  1. Salvare gli elementi preferiti dall'utente.
  2. (L'applicazione ha una chiacchierata) Salvare le conversazioni in chat e le costanti recenti
  3. Implementare una cache persistente per alcune richieste del app
  4. Salva ricerche recenti/modulo al fine di fornire il completamento automatico

(Assegna un nome a ciascuno di questi punti come modulo/pacchetto)

Ogni modulo/pacchetto ha un numero di RealmObjects da persistere. Come dovrei organizzare questo? Dal punto di vista della pulizia del codice, le prestazioni o qualsiasi altra cosa dovrei preoccuparmi

Opzione A: Utilizzare un regno unico (default) con uno schema unico:

Usa Realm.getInstance(context)

Accesso al corretto RealmObjects in ogni modulo/pacchetto

Opzione B: Utilizzare più regni con lo schema predefinito

Specificare un nome diverso nello RealmConfiguration per l'ambito utilizzato in ogni modulo (utilizzando lo schema predefinito).

Poiché i dati appartengono a parti diverse dell'app, isolate e non collegate, utilizzare un nome di dominio diverso per ciascun modulo.

Opzione C: Utilizzare regni multipli e la portata delle classi del modello utilizzato con uno schema per ogni pacchetto di applicazioni specificare un nome e uno schema per ogni pacchetto isolato. Nell'esempio:

public static Realm getChat(Context context){ 
    RealmConfiguration config = new RealmConfiguration.Builder(context) 
      .name("chat.realm") 
      .schemaVersion(1) 
      .setModules(new ChatRealmModule()) 
      .build(); 
    return Realm.getInstance(config); 
} 

// Create the module 
@RealmModule(classes = { ChatRoom.class, ChatMessage.class, ChatUser.class}) 
public static class ChatRealmModule{ 
} 

Opzione D: Altro?

risposta

9

Se i dati sono completamente disconnessi, sceglierei l'opzione C) Ciò rende la separazione netta. Le migrazioni sono più facili da gestire e c'è anche un guadagno di prestazioni molto ridotto poiché Realm deve effettuare il ciclo di tutte le classi di modelli in un Ream di volta in volta.

Ma nessuna delle opzioni è "errata".

1

Sì, è possibile, anche se è possibile di solito hanno più classi in su Reame

Configuring Other Reams mostra come specificare diversi percorsi di file, ad esempio:

RealmConfiguration myConfig = new RealmConfiguration.Builder(context) 
    .name("myrealm.realm") 
    .schemaVersion(2) 
    .modules(new MyCustomSchema()) 
    .build(); 

RealmConfiguration otherConfig = new RealmConfiguration.Builder(context) 
    .name("otherrealm.realm") 
    .schemaVersion(5) 
    .modules(new MyOtherSchema()) 
    .build(); 

Realm myRealm = Realm.getInstance(myConfig); 
Realm otherRealm = Realm.getInstance(otherConfig); 

@RealmModule(classes={Abc.class, Pqrs.class, Xyz.class}) 
class MyCustomSchema{} 

@RealmModule(classes={Abc1.class, Pqrs2.class, Xyz2.class}) 
class MyOtherSchema{} 
Problemi correlati