Я использую шаблон MVP в настоящее время в проекте. Я инициализирую Realm в своем классе Application, как показано ниже в модуле приложения.
Realm.init(this);
RealmConfiguration realmConfig = new RealmConfiguration.Builder()
.name("company.realm")
.schemaVersion(32)
.modules(new RealmAppModule())
.migration(new Migration())
.build();
Realm.setDefaultConfiguration(realmConfig);
А затем используйте область в модуле приложения, как показано ниже:
public class RealmManager {
public static final String TAG = "RealmManager";
protected static RealmManager mInstance = null;
private final ThreadLocal<Realm> localRealm = new ThreadLocal<>();
protected RealmManager() {
}
public static RealmManager getInstance() {
if (mInstance == null) {
synchronized (RealmManager.class) {
if (mInstance == null) {
mInstance = new RealmManager();
}
}
}
return mInstance;
}
private Realm openLocalInstance() {
Realm realm = localRealm.get();
if (realm == null) {
realm = Realm.getDefaultInstance();
}
if (localRealm.get() == null) {
localRealm.set(realm);
}
return realm;
}
private void closeLocalInstance() {
Realm realm = localRealm.get();
/*if (realm == null) {
throw new IllegalStateException(
"Cannot close a Realm that is not open.");
}*/
if (realm != null) {
realm.close();
}
if (Realm.getLocalInstanceCount(Realm.getDefaultConfiguration()) <= 0) {
localRealm.set(null);
}
}
public void deleteClockFromDB(ClockRLM clockRealm) {
try {
Realm mRealm = openLocalInstance();
mRealm.executeTransaction(realm -> {
RealmResults<ClockRLM> result = realm.where(ClockRLM.class)
.equalTo("timeStamp", clockRealm.getTimeStamp()).findAll();
result.deleteAllFromRealm();
});
} catch (Exception e) {
Log.e(TAG, e.getMessage());
} finally {
closeLocalInstance();
}
}
И затем используйте его как в любом месте модуля приложения.
RealmManager.getInstance().deleteClockFromDB(...)
Теперь мы мигрируем в MVVM с АРХИТЕКТУРОЙ МОДУЛЯРИЗАЦИИ, начиная только с одного модуля
MVVM поставляется с Viewmodel, репозиторием, сценариями использования вместе с LiveData. Так что для go с MVVM я думаю использовать https://github.com/Zhuinden/realm-monarchy только в новом модуле, который будет следовать за MVVM. Поэтому я сомневаюсь, как я должен инициализировать монархию и где? Должен ли я сделать это только в новом модуле? И в каком слое (то есть Viewmodel, репозиторий, сценарии использования) я должен начать операции монархии? И как я могу сообщить об изменениях базы данных из БД в представление с данными, перемещающимися по всем этим слоям с помощью LiveData?