定义Android应用程序的MVP模式的问题

时间:2012-02-23 15:26:29

标签: android mvp

我在过去几个月里一直在Android上开发,我已经学到了一些东西,但我认为是时候开始做正确的了,所以我正在尝试实现MVP / MVC模式,这是在这种情况下,最适合处理UI的模式。

我已经阅读了很多线程和示例,但我仍有一些疑问,很可能是因为我缺乏使用android的经验。

一些作者将活动定义为主持人/控制者,将其他一些定义为视图,我认为活动应该作为主持人而不是视图,因为它保持状态并向用户呈现布局的自然能力,也许我我错了,我希望有人能澄清一下。

如果我是正确的,那么Views应该是使用布局和绑定事件与演示者(活动)进行通信的不同类,这是我迷路的地方......

我找不到一种方法来正确创建一个从视图扩展的类,并使用布局来绑定事件并能够与演示者进行通信。我这样做的唯一方法是使用Builder对象,构建器通过inflater创建视图,并绑定事件。这样可行,但是视图没有实现任何破坏我的MVP模式的接口。

我想到的另一种方式是使用View作为Android视图对象的代理,但我不确定这是否是处理它的最佳方法......

如果有人能指出我正确的方向,我真的很感激。

感谢并为这篇长篇文章感到抱歉!

2 个答案:

答案 0 :(得分:3)

我在其他环境中有一些MVC的经验,并且在Android上开发了很多之后,我会说它根本不是直截了当的。

您最终可能会在“活动”中混合使用Controller和View代码。它应该是一个控制器是的,但它确实处理了很多用户交互,菜单,对话框等......并且它不容易摆脱它。

我认为Android开发遵循不同的范例,这让我想起了Django以及他们所谓的MVT,Model-View-Template。

所以我建议不要在Android上严格遵守MVC。视图和控制器代码可能会混合,但您的代码可以通过模块化方法保持可维护性。在这方面,自定义视图或其他专用类可以提供很多帮助。

在我看来,你可以通过遵循框架的自然逻辑而不是寻找学术MVC来节省大量时间。

答案 1 :(得分:1)

如果你不介意意大利面条代码,也许还有潜在的内存泄漏。您可以执行类似于将一个基本布局/视图绑定到活动的操作。然后将首选视图加载到布局中。然后,View的这个自定义类将把Activity带入自身,这样它就可以返回调用它并与之通信的活动。当您想要切换视图时,您只需将当前视图替换为另一个视图。

Fragment的原理是一样的,但我的方式只是堆乱。

在那之后,我坚持使用API​​&分段。它足够接近MVC有点结构,同时保持整洁。

你可以尝试我的方式,这仍然是一种很好的体验,因为它可以教你很多不该做的事情。像Map这样的东西也不适用于视图,以防你还没想到:)