什么是交互器?它如何适合 MVP 设计?使用交互器与将交互器代码放在演示者中相比,有哪些优缺点?
交互器包含应用程序的用例,这意味着它将包含项目业务领域的所有实现。
这里有一篇非常有组织的关于 使用 MVP 模式构建 Android 应用程序。的文章,我强烈推荐您学习。
在撰写本文时(2016) ,许多项目都是使用糟糕版本的 MVC 模式编写的。当活动/片段/控制器有太多行代码时。这个问题通常被称为上帝活动。MVP 通过将类解耦为模型、视图和演示者来解决这个问题,这种做法越来越受欢迎。
但是 MVP 本身是不够的,我们还看到交互器和存储库模式的出现。
什么是交互器? 它如何适应 MVP 设计?
您可以将交互器视为创建、读取、更新和删除(CRUD)模型的“ Util”类。交互器将从数据库、 Web 服务或任何其他数据源中从 Repository 获取数据。 交互器是获得模型的“动词”或“动作”。
获得数据后,交互器将把数据发送给演示者。演示者决定何时或如何使用模型在 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 模式)。
请注意,在这个过程中可以避免交互器,所以不使用这样的 仓库-> 交互器-> 演示者/视图模型数据流,通信可以通过 仓库-> 演示者/视图模型这样发生。这里演示者/视图模型将是演示文稿和域层的一部分。就像我上面说的,互动作为这两个层的分离器。
这里有一些简明扼要的博客来解释这个概念,以供参考
我希望这将帮助您更好地理解交互器的作用。编码愉快! ! !