簡體   English   中英

Android MVP體系結構和領域-如何避免在MVP層之間傳遞上下文?

[英]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功能。

因此,我必須始終將上下文數據從視圖層傳遞到模型層,我認為這不太實用。

我的問題:

  1. 是否有其他不需要使用Context Data來實現Realm功能的方法? 我應該如何以正確的方式來做?

  2. 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM