Android MVP Architecture and Realm - 如何避免在 MVP 层之间传递上下文?
Posted
技术标签:
【中文标题】Android MVP Architecture and Realm - 如何避免在 MVP 层之间传递上下文?【英文标题】:Android MVP Architecture and Realm - How to Avoid Passing Context among the MVP layers? 【发布时间】:2018-12-23 19:59:35 【问题描述】:我学习 android MVP 已经有一段时间了,在我的大部分应用程序中,我发现在 MVP 层之间传递 上下文数据 用于可测试性目的并不实用。
但是,在某些情况下,需要这样做,例如,为了访问 Realm 数据库,我需要 上下文数据 来执行此实现:
领域实现
Realm.init(mainContext)
val config = RealmConfiguration.Builder()
.name(mainContext.getString(R.string.accountRealm))
.build()
realm = Realm.getInstance(config)
只有我可以执行 Realm 的 CRUD 功能。
因此,我必须始终将 上下文数据 从视图层传递到模型层,我认为这不太实用。
我的问题:
我有没有其他方法可以实现 Realm 功能而无需使用 上下文数据?我应该如何以正确的方式做到这一点?
在 MVP 层中继续传递 上下文数据 或其他类似的 android 特定代码是否可以/可以接受?就像这个 Realm 案例一样,它是否被视为“可接受的权衡”?
【问题讨论】:
Realm 文件名是String resource
而不仅仅是"wallet.realm"
有什么原因吗?
@epicpandaforce 我把它作为字符串资源,所以当需要更改名称时,我只需要编辑 String.xml 文件,而不是手动更改所有具有相同实现的函数。
您可能应该在代码中为此创建一个 Public static final 常量,而您突然删除了对 Context 的依赖。
@epicpandaforce 很抱歉,您所说的“删除了对 Context 的依赖”是什么意思?
【参考方案1】:
代码 sn-p 中有两个缺陷(如果我可以这么说的话)。
首先。 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的实例(MVP的数据操作模块)
【讨论】:
以上是关于Android MVP Architecture and Realm - 如何避免在 MVP 层之间传递上下文?的主要内容,如果未能解决你的问题,请参考以下文章
Android MVP Architecture and Realm - 如何避免在 MVP 层之间传递上下文?
Android-architecture之MVCMVPMVVMData-Binding
Android Architecture(中文官方文档)——MVVM、DataBinding、Lifecycle、Room、LiveData