使用 MVP 将数据保存在存储库中以用于多个视图
Persist data in Repository for multiple Views using MVP
我有一个 View1
<--> Presenter1
<--> Repository
。
在某个时刻,我创建了 View2
<--> Presenter2
。创建 View1
时已经加载了所有必要的数据。我只需要在 Presenter2
中使用它。我怎样才能做到这一点?我对存储库模式方法更感兴趣。
我应该这样做吗?:
class Repository {
private val list;
getData() {
...
list = result;
}
}
如果是这样,我如何才能在 View1
和 View2
生命周期内保持 list
持久性并且不丢失它的信息?
我一般都是这样过Repository
的Presenter(new Repository)
。
在这种情况下,您最好的方法是使用依赖项注入 (dagger2) 在每个演示者中注入存储库的相同实例 class。为此,您可以将存储库 class 设为单例:
Appmodule.java
@Module
public class AppModule {
...
@Provides
@Singleton
DataRepository provideDataRepository() {
return new DataRepository();
}
}
通过使用 Singleton 范围,您的存储库对象在整个应用程序中是唯一的。如果您不知道如何使用 Dagger,您可以自己创建一个单例 class,但我强烈建议您查找如何使用 Dagger,因为这将使您的应用更加解耦并且更容易测试。
然后在您的演示者中,您所要做的就是注入存储库的实例。
MyPresenter.java
class MyPresenter{
private DataRepository repo;
@Inject
private MyPresenter(DataRepository repository){
this.repo = repository;
}
}
我有一个 View1
<--> Presenter1
<--> Repository
。
在某个时刻,我创建了 View2
<--> Presenter2
。创建 View1
时已经加载了所有必要的数据。我只需要在 Presenter2
中使用它。我怎样才能做到这一点?我对存储库模式方法更感兴趣。
我应该这样做吗?:
class Repository {
private val list;
getData() {
...
list = result;
}
}
如果是这样,我如何才能在 View1
和 View2
生命周期内保持 list
持久性并且不丢失它的信息?
我一般都是这样过Repository
的Presenter(new Repository)
。
在这种情况下,您最好的方法是使用依赖项注入 (dagger2) 在每个演示者中注入存储库的相同实例 class。为此,您可以将存储库 class 设为单例:
Appmodule.java
@Module
public class AppModule {
...
@Provides
@Singleton
DataRepository provideDataRepository() {
return new DataRepository();
}
}
通过使用 Singleton 范围,您的存储库对象在整个应用程序中是唯一的。如果您不知道如何使用 Dagger,您可以自己创建一个单例 class,但我强烈建议您查找如何使用 Dagger,因为这将使您的应用更加解耦并且更容易测试。
然后在您的演示者中,您所要做的就是注入存储库的实例。
MyPresenter.java
class MyPresenter{
private DataRepository repo;
@Inject
private MyPresenter(DataRepository repository){
this.repo = repository;
}
}