Android MVP:什么是Interactor?

时间:2016-03-02 11:57:00

标签: java android design-patterns mvp android-project-template

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

4 个答案:

答案 0 :(得分:91)

MVP的存在是为了解决上帝活动问题(一个有太多行的活动/片段)。

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

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

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

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

答案 1 :(得分:28)

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的作用

答案 2 :(得分:8)

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

以下是关于Architecturing Android Applications, using the MVP pattern.的非常精心组织的文章,我强烈建议您学习。

我还创建了一个名为 JuicyInsta 的Android应用程序,使用MVP模式和Instagram API,which is shared here on github.

答案 3 :(得分:3)

我个人使用的View,Present和Interactor对我来说与模型不同。

您可以将 Interactor视为具有从数据库,服务器等检索数据的有用方法的类。获得数据后,您可以在交互器中填充模型并将其返回给Presenter。

E.G。您可以使用LoginInteractor创建Asynctask来对用户进行身份验证,然后使用收到的数据填充UserModel。