领域:在应用程序中使用一个或多个领域(以及一个或多个模式)

时间:2015-11-10 13:53:25

标签: java android realm

我正在使用Realm实现一个应用程序,该应用程序在某些点(它们之间不相关)中保留数据。例如:

  1. 保存用户收藏的项目。
  2. (应用聊天)保存聊天对话和最近的常量
  3. 为应用程序的某些请求实现持久性缓存
  4. 保存最近的搜索/表单以提供自动填充
  5. (让我们将这些点中的每一个命名为模块/包)

    每个模块/包都有一些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:其他?

2 个答案:

答案 0 :(得分:9)

如果您的数据真的完全断开,我会选择C) 它使清洁分离。迁移更容易处理,并且还有非常小的性能提升,因为Realm必须不时遍历Realm中的所有模型类。

但是没有一个选项是"错误"。

答案 1 :(得分:2)

是的,你可以,虽然你可以在Realm上有多个班级

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