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

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


当前回答

根据Xamarin团队的解释(在iOS MVC中“我知道这看起来很奇怪,但等一下”):

模型(数据或应用程序逻辑), 视图(用户界面)和 控制器(后面的代码)。

我可以这样说:

Android上的模型只是一个可打包对象。视图是XML布局,控制器是(活动+它的片段)。

*这只是我个人的观点,不是来自任何资源或书籍。

其他回答

没有一个单一的MVC模式可以遵循。MVC只是或多或少地说明了你不应该将数据和视图混为一谈,例如,视图负责保存数据,或者处理数据的类直接影响视图。

但无论如何,Android处理类和资源的方式,有时你甚至被迫遵循MVC模式。在我看来,更复杂的是那些有时负责视图,但同时又充当控制器的活动。

如果您在XML文件中定义视图和布局,从res文件夹加载资源,并且如果您或多或少地避免在代码中混合这些东西,那么您无论如何都是在遵循MVC模式。

Android上的动作、视图和活动是与Android UI一起工作的内置方式,是模型-视图-视图模型(MVVM)模式的实现,它在结构上与模型-视图-控制器相似(在同一家族中)。

据我所知,没有办法打破这个模式。这可能是可以做到的,但是您可能会失去现有模型的所有好处,并且必须重写自己的UI层以使其正常工作。

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

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

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

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

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

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

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

模型视图控制器(MVC)


描述:

当我们要在软件开发中主要进行大型项目时,采用MVC模式 通常使用,因为它是一种通用的组织方式 项目。 新的开发人员可以很快适应项目 帮助开发大型项目和跨平台。


MVC模式本质上是这样的:

模型:显示什么。这可以是数据源(例如:服务器,原始 应用程序中的数据) 视图:显示的方式。这可以是xml。因此,它是作为一个 表示过滤器。视图附加到它的模型(或模型部分) 并获取演示所需的数据。 控制器:处理类似用户输入的事件。这就是活动


MVC的重要特性:我们可以修改模型或视图或控制器,但不影响其他的

比如我们改变视图的颜色,视图的大小或位置 风景。这样做不会影响模型或控制器 假设我们更改模型(而不是从服务器获取的数据) 从资产中获取数据)仍然不会影响视图和 控制器 假设我们改变了控制器(活动中的逻辑),它不会影响 模型和视图