什么是交互器?

什么是交互器?它如何适合 MVP 设计?使用交互器与将交互器代码放在演示者中相比,有哪些优缺点?

48492 次浏览

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

这里有一篇非常有组织的关于 使用 MVP 模式构建 Android 应用程序。的文章,我强烈推荐您学习。

在撰写本文时(2016) ,许多项目都是使用糟糕版本的 MVC 模式编写的。当活动/片段/控制器有太多行代码时。这个问题通常被称为上帝活动。MVP 通过将类解耦为模型、视图和演示者来解决这个问题,这种做法越来越受欢迎。

但是 MVP 本身是不够的,我们还看到交互器和存储库模式的出现。

什么是交互器? 它如何适应 MVP 设计?

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

  • GetUser
  • 更新个人资料
  • 删除状态
  • 等等。

获得数据后,交互器将把数据发送给演示者。演示者决定何时或如何使用模型在 UI 中进行更改。

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

使用交互器与将交互器代码放在演示者中相比,有哪些优缺点?

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

仓库呢?

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

Repository 包含获取模型的实现细节。

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

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

更新(2021年) : 尽管 MVP + 交互器仍然很有用。带有 Android Jetpack 的 MVVM 模式是 Google 首选的 UI 模式。

我个人使用的视图,现在和互动,对我来说是不同的模型。

你可以考虑 作为一个类与有用的方法检索数据库,服务器等的数据交互器。在你得到数据之后,你可以在交互器中填充你的模型,然后把它返回给演示者。

脑电图。您可以有一个 LoginInteractive,它创建一个 Asynctask 来验证用户,然后用接收到的数据填充 UserModel。

Intertor 是一个将域层和表示层分开的类。 简而言之,它提供了一种方法,可以单独编写业务逻辑,而不是编写用于操作 UI 的代码(通过将数据绑定到 UI/animate/导航)。

因此,Interact 是介于 Presenter/ViewModel 和 Repository 模式之间的中介。

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

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

  • View (Activity/Fragment)将调用 Presenter/ViewModel 的方法来获取 typeyList。
  • 然后,Presenter/ViewModel 将调用 intertor 的方法来获取 typeyList
  • 交互器将调用 Repository 的(Category oryRepository)方法来获取 typeyList
  • 存储库将有逻辑来决定是否从 Web 服务(远程数据源)或从数据库存储(本地数据源)或从缓存(临时存储-可以在存储库类中变量)获取类别。
  • Repository 将向 Interactor 返回 typeyList (从选定的数据源获取)
  • 交互器将处理 typeyList (一些格式等)并将其发送到 Presenter/ViewModel。如果不需要处理,交互器可以直接将列表发送到 Presenter/ViewModel
  • Presenter/ViewModel 将调用 View 的方法,其中分类列表作为参数
  • 视图将显示有或没有动画分类列表

请注意,在这个过程中可以避免交互器,所以不使用这样的 仓库-> 交互器-> 演示者/视图模型数据流,通信可以通过 仓库-> 演示者/视图模型这样发生。这里演示者/视图模型将是演示文稿和域层的一部分。就像我上面说的,互动作为这两个层的分离器。

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

我希望这将帮助您更好地理解交互器的作用。编码愉快! ! !