繁体   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