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

Realm: Use one or multiple realms in an app (and one or multiple schemas)

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

  1. 保存用户收藏的项目。
  2. (应用有聊天)保存聊天对话和最近的常量
  3. 为应用程序的某些请求实施持久缓存
  4. 保存最近的 searches/form 以提供自动完成

(让我们将这些点中的每一个命名为 module/package)

每个 module/package 都有一些 RealmObjects 可以坚持。我应该如何组织这个?从代码清洁度、性能或任何我应该关心的角度来看

选项 A:使用具有唯一架构的唯一(默认)领域:

使用Realm.getInstance(context)

在每个 module/package

中访问正确的 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:其他?

如果你的数据真的完全断开,我会选择选项 C) 它实现了干净的分离。迁移更容易处理,并且也有非常小的性能提升,因为 Realm 必须不时循环遍历 Realm 中的所有模型 类。

但是 none 个选项是 "wrong"。

是的,你可以,虽然你通常可以在 Realm

中有多个 类

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

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