Android MVP:什么是Interactor?

bka*_*ach 54 java mvp android design-patterns android-project-template

什么是Interactor?它如何适应MVP设计?使用交互器与将交互器代码放在演示者中有什么优点/缺点?

ald*_*dok 95

MVP的存在是为了解决上帝活动问题(一种活动/片段,它有太多的线条).

虽然它不是强制性的(你可以用你想要的任何模式编码),但许多开发人员都认为MVP适合Android.它使您的源代码更清晰,可测试,可维护和健壮.

您可以将交互器视为"模型/控制器".交互器将从数据库,Web服务或任何其他数据源中获取数据.获取数据后,交互器将数据发送给演示者.因此,在UI中进行更改.

在单独的类中使用交互器的优点是它将使您的类分离,从而使其更清晰和可测试.当然,您可以将交互器放在演示者内部类中,但有什么意义呢?将交互器放入演示者的缺点是它会使您的演示者类更大,并且相对更难以阅读和管理.

更新:当然这只是一个过度简化,如果你想深入挖掘你可能会看到fernando cejas博客antonio leiva博客

  • @JiaqiLiu这是可能的,但并不总是(或更好).您不需要RxJava来使用Interactor.像任何其他库一样,RxJava只是一个工具.找到最适合您需求的工具.如果你有很多并发,那么使用RxJava. (3认同)

sil*_*war 34

Interactor是一个将Domain Layer与Presentation Layer分开的类.简单来说,它提供了单独编写业务逻辑的方法,而不是用于操作UI的代码(通过将数据绑定到UI /动画/导航).

因此,Interactor是Presenter/ViewModel和Repository模式之间的中介.

我没有在MVP中使用Interactor模式,但我在MVVM中使用过它.Interactor可以互换地用于UseCases.

例如,让我们以获取类别的用例来显示在列表中.

  • View(Activity/Fragment)将调用Presenter/ViewModel的方法来获取categoryList.
  • 然后,演示者将调用interactor的方法来获取categoryList
  • Interactor将调用Repository的(CategoryRepository)方法来获取categoryList
  • 存储库将具有逻辑来决定是从Web服务(远程数据源)还是从数据库存储(本地数据源)或从缓存(临时存储 - 可以在存储库类中变量)获取类别.
  • 存储库将categoryList(从选定的数据源获取)返回到Interactor
  • Interactor将处理categoryList(某些格式化等)并将其发送给Presenter.如果不需要处理,Interactor可以直接将列表发送给Presenter
  • Presenter将使用categoryList作为参数调用View的方法
  • 视图将显示包含或不包含动画的categoryList

请注意,在此过程中可以避免使用Interactor,因此可以通过Repository-> Presenter以这种方式进行通信,而不是像Repository-> Interactor-> Presenter那样使用数据流.此处Presenter也将成为Presentation/Domain层的一部分.就像我上面说的那样,Interactor充当这两层的分隔符.

这些是一些简明扼要的博客,以解释这个概念,以供参考

我希望这能帮助您更好地理解Interactor的作用

  • 你先生,值得一枚奖牌. (4认同)

Far*_*ihi 8

Interactor包含应用程序的用例,这意味着它将包含项目业务域的所有实现.

这是一篇关于使用MVP模式构建Android应用程序的非常精心组织的文章.,我强烈建议你去学习.

我还创建了一个名为JuicyInsta的Android应用程序,使用MVP模式和Instagram API,这是在github上共享的.