Observing/Subscribing 应该在 View 还是 Presenter 上完成?

Should the Observing/Subscribing be done on the View or Presenter?

例如,如果有一个带有按钮(视图)的 activity。按下此按钮时,它会调用 Presenter 方法,此方法从服务(模型)获取可观察对象 - 这可能需要很长时间才能回复结果。

是否应将这些结果的订阅者保留在 Presenter 上?然后根据结果,Presenter会调用相关View的action吗?

或者订阅者应该在视图上吗?正如我在这些其他 rx android 示例项目中看到的那样。在这种情况下,activity/fragment 将根据订阅的结果调用其他 View 或 Presenter 方法。

Presenter 应该完成所有的逻辑和繁重的工作,而视图尽可能简单。它只记录用户输入,并在完成所有操作后显示结果。

Should the subscriber for these results be kept on the Presenter? Then depending on the results, the Presenter would call the relevant View's actions?

是的,这是正确的做法。

MVP 模式的主要目标是将数据访问机制与视图(活动、片段)解耦。为了使应用程序易于扩展和维护,我们需要定义分离良好的层。

如果您 return 您订阅了视图,那么它将打破 MVP 模式。你应该让你的观点尽可能愚蠢。所以你应该订阅展示层,让展示层决定视图中的下一步应该是什么。当视图上可能发生不同类型的操作时,可能会出现某些情况。这种逻辑不应该出现在视图中。

**注意:这只是一个建议。让你的观点变得愚蠢。但是您必须根据视图执行的操作来决定视图的愚蠢程度。例如,有一个按钮,其单击事件会弹出 yes/no 类对话框。您不应该调用按钮单击的演示者,让它告诉视图打开一个对话框。

但是你上面描述的情况你应该使用presenter层。

我建议始终订阅 Presenter。如果允许 View 'see' 模型,它应该只以一些简单的方式与模型交互,例如数据绑定和简单验证。否则,View 转储,Presenter 处理所有业务逻辑。

Passive View 和 Supervising Controller 是 MVP 的两个变体,供您参考。

另请在 http://robo-creative.github.io/mvp 上查看 Android 的新 MVP 框架。那里的样本解释了这些变体之间的区别。玩得开心!