✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向)
🐳博客主页:沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN
🔔如果文章对您有一定的帮助请👉关注✨、点赞👍、收藏📂、评论💬。
🔥如需转载请参考【转载须知】
在Android应用程序的开发过程中,开发者们经常使用一些设计模式和架构,以确保代码的组织性、可维护性和可扩展性。本文将深入介绍三种常见的Android开发框架模式:MVC(Model-View-Controller)、MVP(Model-View-Presenter)和MVVM(Model-View-ViewModel),以帮助您更好地理解这些模式的优势和使用场景。
1. MVC(Model-View-Controller)
模型(Model): 数据和业务逻辑的表示。处理应用程序的数据逻辑,负责数据的读写、验证和处理。
视图(View): 用户界面的表示。负责展示数据和接收用户输入,但不处理数据的修改。
控制器(Controller): 连接模型和视图的纽带。处理用户输入、更新模型和调整视图的显示。
MVC模式的优势在于分离关注点,但在Android中,它可能导致控制器变得庞大,难以维护。因此,MVC模式在Android开发中并不是最常用的模式。
2. MVP(Model-View-Presenter)
模型(Model): 与MVC中的模型相似,负责应用程序的数据逻辑。
视图(View): 负责展示数据,与用户交互,但不处理数据的修改。
主持人(Presenter): 连接模型和视图的桥梁。处理用户输入、更新模型并决定如何更新视图。
MVP模式通过将控制逻辑从视图中分离,降低了代码的复杂性,提高了可测试性。Presenter处理所有业务逻辑,而视图只负责用户界面的展示。
3. MVVM(Model-View-ViewModel)
模型(Model): 与MVC和MVP中的模型相同。
视图(View): 负责展示数据,但与MVP不同,视图直接与ViewModel交互。
视图模型(ViewModel): 连接模型和视图的中介。负责处理视图的展示逻辑,从而使视图与模型解耦。
MVVM模式在Android中广泛应用,它通过使用数据绑定技术,使视图和视图模型之间的同步更为简便。ViewModel负责处理所有用户界面的逻辑,而视图则负责展示数据。
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模式则在大型、复杂的项目中表现得更为出色。
在深入理解这些模式的同时,通过实际项目的实践,开发者们可以更好地选择并应用适合自己项目的架构模式,从而提高代码的可维护性和可扩展性。
无论是哪个阶段,坚持努力都是成功的关键。不要停下脚步,继续前行,即使前路崎岖,也请保持乐观和勇气。相信自己的能力,你所追求的目标定会在不久的将来实现。加油!