深入浅出理解Android开发框架中的MVC、MVP和MVVM模式

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向)
🐳博客主页:开源中国稀土掘金51cto博客博客园知乎简书慕课网CSDN
🔔如果文章对您有一定的帮助请👉关注✨、点赞👍、收藏📂、评论💬。
🔥如需转载请参考【转载须知】

在Android应用程序的开发过程中,开发者们经常使用一些设计模式和架构,以确保代码的组织性、可维护性和可扩展性。本文将深入介绍三种常见的Android开发框架模式:MVC(Model-View-Controller)、MVP(Model-View-Presenter)和MVVM(Model-View-ViewModel),以帮助您更好地理解这些模式的优势和使用场景。

一. MVC(Model-View-Controller)

Model 模型 : 数据和业务逻辑的表示。处理应用程序的数据逻辑,负责数据的读写、验证和处理。

View 视图 : 用户界面的表示。负责展示数据和接收用户输入,但不处理数据的修改。

Controller 控制器 : 连接模型和视图的纽带。处理用户输入、更新模型和调整视图的显示。

MVC模式的优势在于分离关注点,但在Android中,它可能导致控制器变得庞大,难以维护。因此,MVC模式在Android开发中并不是最常用的模式。
在这里插入图片描述

优点:

  • 分离关注点: MVC将应用程序划分为数据(模型)、用户界面(视图)和控制逻辑(控制器),使代码结构更加清晰。
  • 灵活性: 可以轻松更改视图或模型,而无需修改其他部分。

缺点:

  • 庞大的控制器: 随着应用程序规模增大,控制器可能变得庞大难以维护。
  • 耦合度较高: 视图和控制器之间的耦合度较高,可能导致代码可读性差。

二. MVP(Model-View-Presenter)

Model 模型 : 与MVC中的模型相似,负责应用程序的数据逻辑。

View 视图 : 负责展示数据,与用户交互,但不处理数据的修改。

Presenter 表示器 : 连接模型和视图的桥梁。处理用户输入、更新模型并决定如何更新视图。

MVP模式通过将控制逻辑从视图中分离,降低了代码的复杂性,提高了可测试性。Presenter处理所有业务逻辑,而视图只负责用户界面的展示。

在这里插入图片描述

优点:

  • 业务逻辑分离: MVP通过将业务逻辑(Presenter)与用户界面(视图)分离,提高了代码的可测试性。
  • 可维护性: 更容易维护和修改,因为业务逻辑单一且分离。

缺点:

  • 仍存在耦合: 视图和业务逻辑之间的交互仍然存在耦合,不如MVVM模式中的解耦程度高。

三. MVVM(Model-View-ViewModel)

Model 模型 : 与MVC和MVP中的模型相同。

View 视图 : 负责展示数据,但与MVP不同,视图直接与ViewModel交互。

ViewModel 视图模型 : 连接模型和视图的中介。负责处理视图的展示逻辑,从而使视图与模型解耦。

MVVM模式在Android中广泛应用,它通过使用数据绑定技术,使视图和视图模型之间的同步更为简便。ViewModel负责处理所有用户界面的逻辑,而视图则负责展示数据。

在这里插入图片描述

优点:

  • 解耦程度高: MVVM通过使用ViewModel作为中介,实现了视图和模型的解耦。
  • 数据绑定: 使用数据绑定技术,使视图与ViewModel同步更为简便。
  • 可维护性: 由于解耦,更易于维护和测试。

缺点:

  • 学习曲线: 相对于MVC和MVP,MVVM有一定的学习曲线。
  • 不适用于小型项目: 对于小型项目,引入MVVM可能显得过于繁琐。

MVC到MVP再到MVVM的发展

MVC被认为是解决用户控制大型和复杂数据集问题的通用解决方案。从经典MVC到MVVM,UI架构经过数次重大变迁,一些概念也在不断变化,架构和底层环境互相影响、适配,我认为时至今日,经典MVC已经不再是UI架构的正常选项。

最初是Thing、Model、View、Editor。后来经过讨论定为Model、View和Controller。

在70年代末,80年代初,我们并没有操作系统和消息循环,甚至鼠标的光标都需要我们的UI系统来自行绘制。假如我们面对的是鼠标、键盘驱动这样的底层环境,我们就需要一定的机制和系统来统一处理用户输入,实现指针系统,文本系统,焦点系统,并且分配给正确的view或者model来处理。这样也就不难理解为什么经典MVC中称controller是用户和系统之间的链接。

Model-View-Presenter是在MVC的基础上,进一步规定了Controller中的一些概念而成。

MVVM认为view应该是事件驱动,模型变化只是一种事件。

如何呈现是view的事,调用方只用给view一个data,view就只负责这个data的显示,调用者不用管view如何显示,只负责将data传递,view也不用管数据从何而来,只要将data以自己的方式呈现,并且时刻关注data的变化如何反映到view上来就好。

而双向绑定,则是一个附加产品,毕竟只有像textbox,form等会改变数据的UI不多,大部分UI都只是单向的呈现数据而已。不过有双向绑定在,则可以将view和调用方分离得更彻底,即获取数据不必在意特别的view,如一个日期是用户在textbox中输入,还是用calendar提取的无关紧要,因为那是view设计和安排的事。

Model 无法将数据“发送”给 View,因为它根本不知道 View 的存在,数据应该是由 Controller 持有,并显示出 View。因此,用户也不是直接操作 Controller,即使是输入 URL,也可以认为那是由 View 触发的(就像在 View 上点击了一个链接)。

因此,MVC 的处理流程是 V -> C -> M -> C -> V。

MVP 模式实际上就是 MVC,只不过这里面的 C 主要负责的不再是业务逻辑,而是界面逻辑了,比如何时显示/隐藏某个选项卡,绑定 View 事件等。

结论

  • MVC: 适用于小型项目,有分离关注点的优势,但可能导致控制器庞大难以维护。
  • MVP: 适用于中等规模的项目,通过分离业务逻辑提高了可测试性,但仍有一定的耦合。
  • MVVM: 适用于大型、复杂的项目,通过数据绑定实现了视图和模型的高度解耦,但需要面对学习曲线。

选择适合项目的模式通常取决于项目的规模、需求和团队的经验。MVC、MVP和MVVM都有各自的优势和适用场景。MVC模式适合小型项目,MVP模式适用于中等规模项目,而MVVM模式则在大型、复杂的项目中表现得更为出色。

通过深入理解这些模式的优缺点,开发者可以更好地选择适合项目需求的架构,提高代码的可维护性和可扩展性。

♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

无论是哪个阶段,坚持努力都是成功的关键。不要停下脚步,继续前行,即使前路崎岖,也请保持乐观和勇气。相信自己的能力,你所追求的目标定会在不久的将来实现。加油!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MVCMVPMVVM 是三种设计模式,用于在 Android 应用程序组织代码。 MVC(模型-视图-控制器):模型存储应用程序数据,视图显示数据,控制器处理用户交互。 MVP(模型-视图-presenter):与 MVC 类似,但 presenter 更加紧密地与视图绑定,负责更新视图。 MVVM(模型-视图-视图模型):与 MVP 类似,但视图模型与视图绑定,负责将数据转换为视图可用的形式。 三者的差异在于MVC会产生视图和模型之间的耦合,MVPMVVM是将视图和模型之间的耦合分离,更加灵活。 ### 回答2: Android开发MVCMVPMVVM都是常见的架构模式,用来组织Android应用的代码结构,让代码更加规范、易于维护。 MVC(Model-View-Controller)是最早的一种架构模式,它将应用分为三个模块:模型(Model)、视图(View)和控制器(Controller)。其模型负责数据的存储和操作,视图负责显示界面,控制器则负责对用户输入进行响应,协调模型和视图之间的关系。MVC模式的优点是结构清晰,各个模块职责分明,易于实现代码复用,因此广泛应用。但是MVC模式也有一些缺点,比如控制器很难进行单元测试,代码复杂度较高,难以维护大型项目等问题。 MVP(Model-View-Presenter)是一种基于MVC模式的改进,它将模型和视图分离,通过在间加上Presenter来连接两者。Presenter接受用户的输入,并根据视图的状态更新数据模型,然后更新视图显示。MVP模式的优点是易于单元测试,将业务逻辑和界面分离,代码复杂度较低,易于维护。但是对于大型项目,Presenter层也会变得庞大且复杂。 MVVM(Model-View-ViewModel)是一种结合数据绑定和命令模式的前端设计模式,它将模型、视图和ViewModel分开,通过数据绑定将视图和ViewModel联系起来。ViewModel封装了视图的状态和行为,当ViewModel被修改时,视图会自动更新。MVVM模式的优点是将视图和ViewModel解耦,通过数据绑定自动更新视图,提高了代码的可重用性。但MVVM模式需要使用大量的数据绑定,可能导致系统卡顿,同时实现较为复杂。 总的来说,MVCMVPMVVM这三种模式都有各自的适用场景。在小型项目,可以使用MVC模式;在型项目,可以使用MVP模式;在大型项目,可以使用MVVM模式。选择合适的架构模式能够让代码更易于维护,提高开发效率。 ### 回答3: Android是一种以Java为基础的开源操作系统,广泛应用于移动设备。在开发Android应用程序时,常用的三种架构模式MVCMVPMVVMMVC是一种典型的应用程序架构模式,其M代表模型,V代表视图,C代表控制器。在AndroidMVC通常用规定ViewController或Activity来实现。 MVP是Model-View-Presenter的缩写,其M代表模型,V代表视图,P代表演示者。MVP将视图项分离,并引入间者Presenter,以实现界面和业务逻辑分离的目的。在AndroidMVP通常实现在Activity或Fragment上。 MVVM是Model-View-ViewModel的缩写,其M代表模型,V代表视图,VM代表视图模型。ViewModel担任间件角色,处理视图的数据,并使控制逻辑与视图分离开。在AndroidMVVM通常实现了Data Binding。 总的来说,三种架构模式都旨在将应用程序分离成各个组成部分,每个部分具有各自分离的职责,在开发Android应用程序时选择合适的架构模式,能够提高开发效率、提高代码质量、降低维护成本、提高整个应用程序的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小北编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值