Царство: используйте одно или несколько царств в приложении (и одну или несколько схем)
Я реализую приложение, которое сохраняет данные в некоторых точках (не связанных между ними) с использованием Realm. В примере:
- Сохраните элементы, выбранные пользователем.
- (приложение имеет чат). Сохраните чаты и последние константы.
- Реализовать постоянный кеш для некоторых запросов приложения
- Сохранить последние поисковые запросы/форму, чтобы обеспечить автозаполнение
(Позволяет называть каждую из этих точек модулем/пакетом)
Каждый модуль/пакет имеет несколько 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: Другой?
Ответы
Ответ 1
Если ваши данные действительно полностью отключены, я бы пошел с опцией C)
Это обеспечивает чистое разделение. Миграции легче обрабатываются, а также очень небольшое усиление производительности, так как Realm должен периодически перебирать все классы моделей в Realm.
Но ни один из вариантов не является "неправильным".
Ответ 2
Да, вы можете, хотя обычно вы можете иметь несколько классов в Realm
Конфигурирование других вершин показывает, как указать разные пути к файлу, например:
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{}