什么是交互器?它如何融入 MVP 设计?使用交互器与将交互器代码放在演示器中有什么优点/缺点?
原文由 bkach 发布,翻译遵循 CC BY-SA 4.0 许可协议
什么是交互器?它如何融入 MVP 设计?使用交互器与将交互器代码放在演示器中有什么优点/缺点?
原文由 bkach 发布,翻译遵循 CC BY-SA 4.0 许可协议
Interactor 是一个将领域层与表示层分开的类。简而言之,它提供了与用于操作 UI 的代码(通过将数据绑定到 UI/动画/导航)分开编写业务逻辑的方法。
所以 Interactor 是 Presenter/ViewModel 和 Repository 模式之间的中介。
我没有在 MVP 中使用交互器模式,但我在 MVVM 中使用过它。 Interactor 可以互换地用于 UseCases。
例如,让我们以获取类别以显示在列表中的用例为例(在下面的示例中,Presenter 代表 MVP,ViewModel 代表 MVVM 模式)。
请注意,在此过程中可以避免使用 Interactor,因此可以通过 Repository->Presenter/ViewModel 这种方式使用 Repository->Interactor->Presenter/ViewModel 来代替使用数据流。这里 Presenter/ViewModel 将成为 Presentation 和 Domain 层的一部分。就像我上面说的,Interactor 充当这两层的分隔符。
这些是一些简明扼要的博客来解释这个概念,以供参考
我希望这能帮助您更好地理解 Interactor 的作用。编码快乐!!!
原文由 silwar 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
在撰写本文时(2016 年),许多项目都是使用错误版本的 MVC 模式编写的。 Activity/Fragment/Controller 的代码行太多。这个问题通常被称为上帝活动。 MVP 越来越受欢迎,它通过将类与模型、视图和演示者解耦来解决这个问题。
但是 MVP 本身还不够,我们还看到了 Interactor 和 Repository 模式的出现。
您可以将交互器视为创建、读取、更新和删除 (CRUD) 模型的“Util”类。交互器将从存储库中的数据库、Web 服务或任何其他数据源获取数据。交互器是获取模型的“动词”或“动作”。
Interactor拿到数据后,会将数据发送给Presenter。演示者决定何时或如何使用模型来更改您的 UI。
使用交互器意味着业务逻辑是解耦的。因为它是解耦的;代码可重用、更简单且可测试。
您可以将“交互代码”放入演示器中,例如,如果您确信代码足够简单,则不需要将其提取到单独的类中。但是,如果您决定使用交互器,则交互器可以在其他演示者上重复使用。
存储库呢?
存储库是负责 CRUD 操作的实现细节的类,例如连接到数据库。
存储库包含获取模型的实现细节。
有些人称此为数据源,但我相信这些术语可以互换。
更新(2021 年):尽管 MVP + Interactor 仍然有用。带有 Android Jetpack 的 MVVM 模式是谷歌首选的 UI 模式。