2015-11-10 30 views
12

我正在实施一个应用程序,该应用程序在使用Realm的某些点(不相关)保留数据。例如:领域:在应用程序中使用一个或多个领域(以及一个或多个模式)

  1. 保存用户偏好的项目。
  2. (该应用程序有一个聊天)保存聊天对话和最近的常量
  3. 实现对应用程序
  4. 保存最近的搜索/形式的一些请求持久性高速缓存,以提供自动完成

(让我们将每个点命名为模块/包)

每个模块/包都有一些RealmObjects要保留。我应该如何组织这个?从视图代码清洁,性能或什么的时候,我应该关心

选项A:使用唯一的(默认)领域具有独特的模式:

使用Realm.getInstance(context)

访问到正确的RealmObjects在每个模块/包

选项B:使用多个域与默认模式

为每个模块中使用的领域(使用默认模式)在RealmConfiguration中指定一个不同的名称。

由于数据属于应用程序的不同部分,而且互相隔离且不互连,因此请为每个模块使用不同的领域名称。

选项C:使用多个领域和范围的每个应用程序包 的模式中使用的模型类指定名称和每个分离的包的模式。在例如:

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{ 
} 

选项d:其它?

回答

9

如果您的数据真的完全断开连接,我会选择C) 它使得一个干净的分离。迁移更容易处理,而且Realm必须不时地遍历Realm中的所有模型类,所以性能增益也非常小。

但是没有一个选项是“错误的”。

1

当然可以,但你可以将通常在境界上的多个类

Configuring Other Reams显示了如何指定不同的文件路径,例如:

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{}