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

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


当前回答

当我们将MVC、MVVM或Presentation Model应用到Android应用中时,我们真正想要的是有一个清晰的结构化项目,更重要的是更容易进行单元测试。

目前,如果没有第三方框架,通常会有大量代码(如addXXListener()、findViewById()等),这不会增加任何业务价值。

更重要的是,你必须运行Android单元测试,而不是正常的JUnit测试,后者需要很长时间才能运行,并且使单元测试有些不切实际。基于这些原因,几年前我们开始了一个开源项目RoboBinding——一个用于Android平台的数据绑定表示模型框架。

RoboBinding帮助您编写更易于阅读、测试和维护的UI代码。RoboBinding消除了对addXXListener等不必要代码的需求,并将UI逻辑转移到表示模型(Presentation Model),这是一个POJO,可以通过正常的JUnit测试进行测试。RoboBinding本身带有300多个JUnit测试,以确保其质量。

其他回答

在Android中,你没有MVC,但你有以下:

您可以根据分辨率、硬件等在各种XML文件中定义用户界面。 您可以根据语言环境等在各种XML文件中定义资源。 您可以扩展ListActivity、TabActivity等类,并通过扩展器使用XML文件。 您可以为业务逻辑创建任意数量的类。 很多Utils已经为您编写- DatabaseUtils, Html。

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

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

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

我发现在Android上实现MVC最好的资源是这篇文章:

我在自己的一个项目中采用了同样的设计,效果非常好。我是Android的初学者,所以我不能说这是最好的解决方案。

我做了一个修改:我实例化了应用程序类中每个活动的模型和控制器,这样当横向-纵向模式更改时就不会重新创建这些模型和控制器。

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

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

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

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

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

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

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