2016-03-02 91 views

回答

62

MVP的存在是为了解决神活动的问题(一个活动/片段有太多的线)。尽管它不是强制性的(你可以用任何你想要的模式进行编码),但许多开发人员都认为MVP适用于Android。它使您的源代码更清洁,可测试,可维护和强大。

您可以将交互器视为您的“模型/控制器”。交互者将从您的数据库,Web服务或任何其他数据源提取数据。获取数据后,交互者将把数据发送给演示者。因此,在您的用户界面进行更改。

在一个单独的类中使用交互器的优点是它可以分离你的类,从而使它更清洁和可测试。当然,您可以将交互器放在演讲者内部班级中,但有什么意义?将交互器放置在演示者中的缺点是它会使演讲者班级变得更大并且相对更难以阅读和管理。

更新: 当然,这仅仅是一个过于简单化,如果你想更深入,你可能会看到fernando cejas blogantonio leiva blog

+0

一个明确的答案。用RxJava替换Interactors是可行的还是更好的? –

+1

@JiaqiLiu这是可能的,但并不总是(或更好)。你不需要RxJava来使用Interactor。像任何其他图书馆一样,RxJava只是一个工具。找到适合您需求的最佳工具。如果你有很多的同时使用RxJava。 – aldok

6

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

这里是一篇关于Architecturing Android Applications, using the MVP pattern.的非常精心组织的文章,我强烈建议您学习。

此外,我创建了一个叫做JuicyInsta一个Android应用程序,使用MVP模式和Instagram的API,which is shared here on github.

+1

This do我看起来并不清楚。读那篇文章实际上是什么促成了这个问题 - “业务领域的实现”是什么意思? – bkach

+0

@bkach在我的理解中,有一个接口定义业务将做什么例如一家银行,您将使用以下方法创建一个接口,如提取,转移,存款等。现在您可能需要实现此接口让说取决于客户?或者按照商业规则的规定。但我可能是错的。 –

2

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

您可以考虑将Interactor作为一个类,使用有用的方法从数据库,服务器等检索数据。获得数据后,您可以在Interactor中填充模型并将其返回给演示者。

E.G.你可以有一个LoginInteractor创建一个Asynctask来认证用户,然后用收到的数据填充UserModel。

5

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

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

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

例如,让我们拿取类别的用例来显示在列表中。

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

注意,在这个过程中交互器可避免所以不要使用像这样的数据流Repository-> Interactor-> Presenter,通信可以通过存储库 - > Presenter这种方式发生。这里Presenter也将成为Presentation/Domain层的一部分。就像我上面说的,Interactor充当了这两层的分隔符。

这些都是一些简洁的书面博客来解释这个概念以供参考

我希望这将帮助你在交互器的认识作用,更好地way