观察/订阅是否应在视图或演示者上完成?

时间:2016-06-02 18:43:49

标签: android rx-java mvp

例如,如果有带按钮的活动(查看)。按下此按钮时,它会调用Presenter方法,此方法从服务(模型)中获取可观察结果 - 这可能需要很长时间才能回复结果。

这些结果的订阅者是否应保留在演示者上?那么根据结果,Presenter会调用相关的View的操作吗?

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

3 个答案:

答案 0 :(得分:4)

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

如果您在视图上返回订阅者,那么它将破坏MVP模式。你应该尽可能地让自己的观点变得愚蠢。因此,您应该在presenter层上进行订阅,并让演示者层决定视图中的下一步应该是什么。当视图上可能发生不同类型的操作时,可能会出现某种情况。这种逻辑不应该出现在视野中。

**注意:这只是一个建议。让你的观点愚蠢。但是你必须根据它所执行的动作来决定你将视多少愚蠢。例如,有一个按钮,其click事件会弹出是/否类型的对话框。您不应该向演示者调用按钮单击并让它告诉视图打开对话框。

但是您在上面描述的情况应该使用演示者层。

答案 1 :(得分:1)

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

  

这些结果的订阅者是否应保留在演示者上?然后   根据结果​​,演示者会调用相关的视图   操作

是的,这是正确的方法。

答案 2 :(得分:1)

我建议始终保持对Presenter的订阅。如果允许查看,请参阅'模型,它应该只以一些简单的方式与模型交互,如数据绑定和简单验证。否则,View是转储,Presenter继续执行所有业务逻辑。

被动视图和监督控制器是MVP的两种变体,供您参考。

还请在http://robo-creative.github.io/mvp结帐新的Android MVP框架。那里的样品解释了这些变体之间的差异。玩得开心!