Android MVP:什么是 Interactor?
什么是交互者?它如何适应MVP设计?与将交互器代码放在演示器中相比,使用交互器的优点/缺点是什么?
什么是交互者?它如何适应MVP设计?与将交互器代码放在演示器中相比,使用交互器的优点/缺点是什么?
在撰写本文时(2016年),许多项目都是使用MVC模式的错误版本编写的。其中活动/片段/控制器具有太多代码行。这个问题通常被称为神的活动。MVP 越来越受欢迎,通过将类解耦为模型、视图和表示器来解决此问题。
但MVP本身还不够,我们还看到交互器和存储库模式的出现。
什么是交互者?它如何适应MVP设计?
您可以将交互组件视为创建、读取、更新和删除 (CRUD) 模型的“Util”类。交互者将从存储库的数据库、Web 服务或任何其他数据源中提取数据。交互器是获取模型的“动词”或“操作”。
获取数据后,交互者会将数据发送给演示者。演示者决定何时或如何使用模型在 UI 中进行更改。
使用交互器意味着业务逻辑是分离的。因为它是解耦的;代码是可重用的,更简单的,可测试的。
与将交互器代码放在演示器中相比,使用交互器的优点/缺点是什么?
您可以将“交互器代码”放在演示器中,例如,如果您确信代码足够简单,则不需要将其提取到单独的类中。但是,如果您决定使用交互器,则可以在其他演示器上重用该交互器。
存储库呢?
存储库是负责 CRUD 操作(如连接到数据库)的实现详细信息的类。
存储库包含用于获取模型的实现详细信息。
class UserRepository {
fun connectToDb() {}
fun getUser(): User {}
}
有些人称之为数据源,但我相信这些术语是可以互换的。
更新(2021):即使MVP +交互器仍然有用。带有Android Jetpack的MVVM模式是Google首选的UI模式。
交互器是将域层与表示层分开的类。简单来说,它提供了与用于操作UI的代码(通过将数据绑定到UI /动画/导航)分开编写业务逻辑的方法。
因此,Interactor 是 Presenter/ViewModel 和 Repository 模式之间的中介。
我没有在MVP中使用过交互器模式,但我在MVVM中使用它。交互器可以互换用于用例。
例如,让我们以获取要在列表中显示的类别的用例为例(在下面的示例中,表示器表示MVP,ViewModel表示MVVM模式)。
请注意,在此过程中可以避免交互器,因此无需使用像存储库>Interactor>Presenter/ViewModel这样的数据流,而是可以通过存储库>Presenter/ViewModel以这种方式进行通信。在这里,演示者/视图模型将成为演示以及域层的一部分。就像我上面说的,Interactor充当这两层的分隔符。
这些是一些简明扼要的博客来解释这个概念以供参考
我希望这将有助于您以更好的方式理解交互者的角色。快乐编码!!!