有可能在Java中为Android实现模型-视图-控制器模式吗?

或者它已经通过活动实现了吗?或者有没有更好的方法来实现Android的MVC模式?


当前回答

在我看来,Android处理MVC模式的方式是这样的:

您有一个充当控制器的Activity。你有一个负责获取数据的类,即模型,然后你有一个View类,即视图。

当谈到视图时,大多数人只想到xml中定义的可视部分。不要忘记,视图也有一个程序部分,它的构造函数,方法等,在java类中定义。

其他回答

没有普遍唯一的MVC模式。MVC是一个概念,而不是一个可靠的编程框架。你可以在任何平台上实现你自己的MVC。只要你坚持以下基本思想,你就是在实现MVC:

模型:渲染什么 视图:如何渲染 控制器:事件,用户输入

也可以这样考虑:当您为模型编程时,模型不应该担心呈现(或特定于平台的代码)。模型会对视图说,我不在乎你的渲染是Android, iOS还是Windows Phone,这是我需要你渲染的。 视图将只处理特定于平台的呈现代码。

当您使用Mono共享模型以开发跨平台应用程序时,这一点特别有用。

经过一番搜索,最合理的答案是:

MVC已经在Android中实现了:

View =布局,资源和内置类,如从android.view.View派生的Button。 控制器=活动 模型=实现应用程序逻辑的类

(顺便说一下,这意味着活动中没有应用程序域逻辑。)

对于小型开发人员来说,最合理的做法是遵循这种模式,不要尝试做谷歌决定不做的事情。

PS注意,活动有时会重新启动,所以它不是模型数据的地方(引起重新启动的最简单的方法是从XML中省略android:configChanges="keyboardHidden|orientation",然后转动你的设备)。

EDIT

我们可能会谈论MVC,但它会这样说,FMVC,框架-模型-视图-控制器。框架(Android操作系统)强加了它的组件生命周期和相关事件的想法,在实践中,控制器(活动/服务/BroadcastReceiver)首先负责处理这些框架强加的事件(如onCreate())。是否应该单独处理用户输入?即使应该,你也不能把它分开,用户输入事件也来自Android。

总之,你在Activity/Service/BroadcastReceiver中植入的非android专用代码越少越好。

使用布局、资源、活动和意图创建Android UI是MVC模式的实现。请参阅以下链接了解更多信息- http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

PDF镜像

我同意JDPeckham的观点,并且我相信XML本身不足以实现应用程序的UI部分。

然而,如果你认为Activity是视图的一部分,那么实现MVC是相当简单的。您可以重写Application(由Activity中的getApplication()返回),在这里您可以创建一个在应用程序的生命周期中存在的控制器。

(或者,您也可以使用应用程序文档中建议的单例模式)

你可以在Android中实现MVC,但它不是“原生支持”的,需要一些努力。

也就是说,我个人倾向于认为MVP对于Android开发来说是一种更简洁的架构模式。说到MVP,我的意思是:

我也在这里发布了一个更详细的答案。

在尝试了Android中MVC/MVP实现的各种方法后,我想出了一个合理的架构模式,我在这篇文章中描述了它:Android中的MVP和MVC架构模式。