在这里描述了将活动作为视图:MVP Android,这是有道理的。但另一方面,我发现了这个答案,有一些赞同:https://dev59.com/GlvUa4cB1Zd3GeqPuYrx#7609943,有人说活动应该是一个演示者。
有人有这种模式的经验吗?
经过一番思考,我认为Activity应该被视为视图。如果我们将业务逻辑与活动分开,那么用片段或视图替换活动将变得容易。我们甚至可以将模型和展示器带到桌面应用程序中,只需添加新的视图即可。对于测试目的来说,将Presenter创建为普通对象而不是活动对象更好。
我认为把Activity视为Presenter是安全的。View可以被视为布局XML文件。如上面所说,Presenter是直接连接到模型和视图的东西。在一个Activity中,你连接到View,并作为View和Model之间的中介,这实际上就是Presenter的功能。它从View获取输入事件,并将从Model接收到的值设置为要在View中显示的值。
活动应该是视图,因为它是图形渲染的地方。Presenter和Model可以用纯Java编写,并且很容易进行测试。
请参考AndroidMvc/Mvp框架。
https://github.com/kejunxia/AndroidMvc
还可以在这里查看MVP示例 https://github.com/kejunxia/AndroidMvc/tree/master/samples/simple-mvp
这里的术语“View”被重载了,Android View与MVP模式中应该使用的View不同。View是一个接口,应该由Activity / Fragment实现。您可以查看官方Android MVP示例。
我建议从基础教程开始。以下是页面的流程。
在决定活动应该是视图或者呈现器组件时,我们必须遵循单一职责原则。
几乎不可能将业务逻辑与活动分开。其中一个主要原因是,活动继承了Context。
从功能上来说,Context对象提供对大多数平台功能的访问权限,第三方应用程序可以使用这些功能。由于Activity是Context的子类,我们的应用程序使用它的API来控制平台的某些功能和资源的子集。而使用这些功能和资源的逻辑就是我们的业务逻辑。因此,无论我们如何努力,都无法完全将业务逻辑与活动分离。
既然我们无法将业务逻辑与活动分离,那么我们就应该将所有UI逻辑与它分离。这并不是一项微不足道的任务,但从长远来看,非常值得努力。