Android MVP:什么是交互器?

新手上路,请多包涵

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

原文由 bkach 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

在撰写本文时(2016 年),许多项目都是使用错误版本的 MVC 模式编写的。 Activity/Fragment/Controller 的代码行太多。这个问题通常被称为上帝活动。 MVP 越来越受欢迎,它通过将类与模型、视图和演示者解耦来解决这个问题。

但是 MVP 本身还不够,我们还看到了 Interactor 和 Repository 模式的出现。

什么是交互器?它如何融入 MVP 设计?

您可以将交互器视为创建、读取、更新和删除 (CRUD) 模型的“Util”类。交互器将从存储库中的数据库、Web 服务或任何其他数据源获取数据。交互器是获取模型的“动词”或“动作”。

  • 获取用户
  • 更新个人信息
  • 删除状态
  • 等等..

Interactor拿到数据后,会将数据发送给Presenter。演示者决定何时或如何使用模型来更改您的 UI。

使用交互器意味着业务逻辑是解耦的。因为它是解耦的;代码可重用、更简单且可测试。

使用交互器与将交互器代码放在演示器中有什么优点/缺点?

您可以将“交互代码”放入演示器中,例如,如果您确信代码足够简单,则不需要将其提取到单独的类中。但是,如果您决定使用交互器,则交互器可以在其他演示者上重复使用。

存储库呢?

存储库是负责 CRUD 操作的实现细节的类,例如连接到数据库。

存储库包含获取模型的实现细节。

 class UserRepository {
    fun connectToDb() {}
    fun getUser(): User {}
}

有些人称此为数据源,但我相信这些术语可以互换。

更新(2021 年):尽管 MVP + Interactor 仍然有用。带有 Android Jetpack 的 MVVM 模式是谷歌首选的 UI 模式。

原文由 aldok 发布,翻译遵循 CC BY-SA 4.0 许可协议

Interactor 是一个将领域层与表示层分开的类。简而言之,它提供了与用于操作 UI 的代码(通过将数据绑定到 UI/动画/导航)分开编写业务逻辑的方法。

所以 Interactor 是 Presenter/ViewModel 和 Repository 模式之间的中介。

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

例如,让我们以获取类别以显示在列表中的用例为例(在下面的示例中,Presenter 代表 MVP,ViewModel 代表 MVVM 模式)。

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

请注意,在此过程中可以避免使用 Interactor,因此可以通过 Repository->Presenter/ViewModel 这种方式使用 Repository->Interactor->Presenter/ViewModel 来代替使用数据流。这里 Presenter/ViewModel 将成为 Presentation 和 Domain 层的一部分。就像我上面说的,Interactor 充当这两层的分隔符。

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

我希望这能帮助您更好地理解 Interactor 的作用。编码快乐!!!

原文由 silwar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题