使用Android MVP Clean Architecture实现交互者

时间:2016-06-02 20:49:26

标签: android mvvm architecture mvp android-databinding

我目前正在构建一个Android应用程序,并希望将其基于“干净架构”,类似于以下作者的建议:

当前架构:

查看(片段)< - >演示者< - >交互者< - >存储库

  • Fragment实现了View并创建了一个Presenter。
  • Presenter通过View界面引用Fragment。
  • Presenter为要呈现的数据实现Interactor.Callback接口
  • Presenter创建并启动Interactor。
  • 交互者取出&在存储库的后台线程中更新数据以执行业务逻辑
  • Interactor为Repository中的DB / Server数据实现Repository.Callback。
  • 交互者在存储库中注册所需的数据。

在当前设计中,每个显示器有1个交互器(显示器可以包括多个片段,例如具有30个相同类型的片段的ViewPager)和每个片段1个演示器。 Presenter和Interactor没有框架依赖关系,可以轻松进行测试。

我主要关心的是Interactors / UseCases的实现及其与Presenters(MVP)或ViewModel(MVVM)的关系。

问题:

计划让Interactor首先获取显示所需的所有业务对象(BO)。 从数据层同步完成提取,并且每个接收到的BO都指向Presenter。 这会导致延迟,直到视图中显示所有数据。

此外,它注册了它感兴趣的BO的更新(与之前提取的相同),以通过演示者不断更新视图。

因此,我正在寻找如何在我的案例中设置Interactor的指南。 上面提到的实现有一个任务,然后完成它,并且可以关闭Interactor后台线程。

在我的情况下,Interactor从datalayer注册更新并等待处理它们,然后将数据发布到Presenter UI线程,只要有演示者监听就行。

此功能不同,我正在寻找一种良好的做法,使其适用于“干净的架构”。

1 个答案:

答案 0 :(得分:3)

因此,如果我理解你的问题,你的担忧或怀疑是因为你的Interactor不会执行任务然后完成,但是在操作完成之前将会订阅或监听。

在我看来,完全没问题,Interactor实现了一个用例,并且在你的程序中异步请求是一个用例,如果它需要时间并且是异步任务或者是同步操作也没关系。 / p>

这仍然是Presenter将实例化Interactor的用例,当它完成时,它将发回操作的结果。只要您保持模块化并且Presenter和Interactor没有直接依赖关系,但它们通过间接进行通信,那就完全没问题了。