使用Android MVP Clean Architecture实现交互者

Cas*_*sio 7 architecture mvp android mvvm android-databinding

我正在构建一个Android应用程序,并希望以"干净架构"为基础,类似于以下作者的建议:

目前的架构:

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

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

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

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

问题:

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

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


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

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

这个功能是不同的,我正在寻找一个良好的做法,使其与"干净的架构"一起工作.

Dav*_*ero 3

因此,如果我理解您的问题,您的担忧或疑问就会出现,因为您的交互器不会执行任务然后完成,而是会订阅或监听直到操作完成。

在我看来,这完全没问题,交互器实现了一个用例,并且在您的程序中,异步请求是一个用例,它是否需要时间并且是异步任务还是同步操作并不重要。

这仍然是一个用例,其中 Presenter 将实例化 Interactor,并且当完成后,它将发回操作结果。只要保持模块化,并且 Presenter 和 Interactor 不与直接依赖项耦合,而是通过间接通信,那就完全没问题。