Android MVP - Activity应该是View还是Presenter?

8
我希望使用MVP模式实现我的下一个应用程序,因此我开始阅读一些关于如何实现它的文章。对我来说主要问题是这种模式有不同的方法。有人说我们应该将活动视为视图,但也有人说活动应该是一个演示者。
在这里描述了将活动作为视图:MVP Android,这是有道理的。但另一方面,我发现了这个答案,有一些赞同:https://dev59.com/GlvUa4cB1Zd3GeqPuYrx#7609943,有人说活动应该是一个演示者。
有人有这种模式的经验吗?
7个回答

10

经过一番思考,我认为Activity应该被视为视图。如果我们将业务逻辑与活动分开,那么用片段或视图替换活动将变得容易。我们甚至可以将模型和展示器带到桌面应用程序中,只需添加新的视图即可。对于测试目的来说,将Presenter创建为普通对象而不是活动对象更好。


7

Activity非常接近于您的布局,因此它应该是一个视图。而您的业务逻辑应该在由Activity创建的Presenter中。

要了解更多关于MVP的内容,请参阅-面向Android的MVP

输入图像描述


3

我认为把Activity视为Presenter是安全的。View可以被视为布局XML文件。如上面所说,Presenter是直接连接到模型和视图的东西。在一个Activity中,你连接到View,并作为View和Model之间的中介,这实际上就是Presenter的功能。它从View获取输入事件,并将从Model接收到的值设置为要在View中显示的值。


2
视图不建议底层实现细节。视图只是一个抽象,可以用许多方式实现(GWT视图、模拟视图、基于Android的视图)。我真的认为在Android中,活动更接近于View,因为活动倾向于了解实现细节(底层布局XML等)。在单元测试中,将Presenter作为活动绑定您紧密到Android环境,而分离的视图层不可知Presenter提供了更大的灵活性(您可以轻松地使用“mvn test”测试您的Presenter)。 - Lyubomyr Shaydariv
那么你作为演示者提出了什么建议? - Harikrishnan
1
正如我之前所说,演示者应该是一个与视图层无关的中间人。例如,在最简单的情况下,它可以是一个简单的类,通过接口引用模型和视图,并且可以指导模型和视图之间的交互和工作流程。假设你有这样一个演示者,可以轻松地在不同的环境中重复使用:Android、GWT等等。 - Lyubomyr Shaydariv

1

0

0

这里的术语“View”被重载了,Android View与MVP模式中应该使用的View不同。View是一个接口,应该由Activity / Fragment实现。您可以查看官方Android MVP示例

我建议从基础教程开始。以下是页面的流程。

enter image description here


根据您所引用的文档,“在这个应用程序版本中,Activity是总控制器,它创建和连接视图和Presenter。” - YTerle

-1

在决定活动应该是视图或者呈现器组件时,我们必须遵循单一职责原则。

几乎不可能将业务逻辑与活动分开。其中一个主要原因是,活动继承了Context。

从功能上来说,Context对象提供对大多数平台功能的访问权限,第三方应用程序可以使用这些功能。由于Activity是Context的子类,我们的应用程序使用它的API来控制平台的某些功能和资源的子集。而使用这些功能和资源的逻辑就是我们的业务逻辑。因此,无论我们如何努力,都无法完全将业务逻辑与活动分离。

既然我们无法将业务逻辑与活动分离,那么我们就应该将所有UI逻辑与它分离。这并不是一项微不足道的任务,但从长远来看,非常值得努力。


你至少应该提到你复制这篇文章的来源。这是链接 - Ruan_Lopes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接