使用 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;
    }
}

如果是这样,我如何才能在 View1View2 生命周期内保持 list 持久性并且不丢失它的信息?

我一般都是这样过RepositoryPresenter(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;
   }
}