[英]Android MVP Architecture and Realm - How to Avoid Passing Context among the MVP layers?
我學習Android MVP已有一段時間了,在我的大多數應用程序中,我發現出於可測試性的目的,在MVP層之間傳遞上下文數據並不那么實際。
但是,在某些情況下,需要這樣做,例如,為了訪問Realm數據庫,我將需要Context Data來執行此實現:
領域實施
Realm.init(mainContext)
val config = RealmConfiguration.Builder()
.name(mainContext.getString(R.string.accountRealm))
.build()
realm = Realm.getInstance(config)
只有這樣我才能執行Realm的CRUD功能。
因此,我必須始終將上下文數據從視圖層傳遞到模型層,我認為這不太實用。
我的問題:
是否有其他不需要使用Context Data來實現Realm功能的方法? 我應該如何以正確的方式來做?
在MVP層之間繼續傳遞上下文數據或其他類似的android特定代碼是否可以/可以接受? 像此Realm案例一樣,它是否被視為“可接受的折衷”?
代碼段中有兩個缺陷(如果可以的話)。
第一。 Realm.init(mainContext)
應該在Application的onCreate()
中完成一次。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
}
}
然后如下所示將MyApplication
添加到manifest.xml
文件中。
<application
android:name=".MyApplication"
<!--rest of properties-->
/>
第二。 從資源中讀取靜態字符串通常是一個好主意,但並非在所有情況下都如此。 例如,這種情況是例外。
創建一個Java類來保存您的數據庫名稱,如下所示:
public class AppStatics{
public final static REALM_DATABASE_NAME = "myrealm.realm";
}
然后只需從此類中獲取數據庫名稱即可為Realm數據庫設置名稱。 。 您不必每次都配置Realm。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration.Builder()
.name(mainContext.getString(R.string.accountRealm))
.build()
Realm.setDefaultConfiguration(config);
}
}
現在您可以通過調用Realm realm = Realm.getDefaultInstance();
來調用Realm realm = Realm.getDefaultInstance();
實例Realm realm = Realm.getDefaultInstance();
在您的模型中(MVP的數據操作模塊)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.