| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> MVC MVP与MVVM对比分析,源码解析 -> 正文阅读 |
|
[移动开发]MVC MVP与MVVM对比分析,源码解析 |
Model-View-Controller,模型-视图-控制器,是一种典型的三层软件体系架构,在这种分层的设计思想下,软件展示界面与逻辑分离,可以极大地提高代码的可读性与可维护性。
在标准的MVC架构中,Controller和View都依赖于Model。MVC架构通过Controller来更新数据,通过View展示数据。 根据Model(模型)层的被动与主动,可将MVC分为被动模式和主动模式。被动模式下,Model不会主动将变化通知到View进行更新,而是由Controller通知View,Model变化了需要进行更新,而且只有Controller可以对Model进行更新。主动模式下,Model的修改会通知View更新,主动模式利用了观察者模式,View作为观察者,Model为被观察者。 被动模式与主动模式相比,它的缺点主要是View无法感知Model的变化,而需要通过Controller来间接地通知更新。但同时它也是一个优点,Controller可以更好地控制View的更新,而不必担心Model主动通知变化而产生同步问题。 MVC的核心思想是表现层分离,即将领域模型和视图模型分离。在MVC中,领域模型是Model,视图模型是View与Controller协作的整体。Controller不仅负责操作Model进行业务逻辑处理,还负责进行View相关的界面展示处理,其中包括View的处理细节,因此,我们可以说Controller肩负着过重的责任,只适用于小型的app,应用于大型app时,会出现Massive View Controller(过重的视图控制器)的问题。 MVPModel-View-Presenter 模型-视图-主持人,三层架构模式。
在MVP模式中,Presenter层可以依赖View层和Model层,充当沟通的桥梁。View层的事件传递流经过Presenter层操作Model进行业务逻辑处理。Model层数据处理完成会通知Presenter层,Presenter层再与View层进行沟通。Presenter层与View、Model之间是双向数据流,而View与Model之间没有直接联系。MVP模型如下图所示: MVP的核心思想,除了有与MVC相同的表现层分离外,还有面向接口编程和德莫忒尔定律。 面向接口编程是将类中的方法提炼出来成为接口,由实现类实现该接口,而调用方通过接口与实现类进行交互。面向接口编程的优点:
在Android的MVP开发中,经常使用一种协议类-Contract,将View与Presenter之间的接口建立协议关联关系。Contract接口中包含View和Presenter接口。 德莫忒尔定律其实就是“高内聚低耦合”的设计思想。 MVP与MVC的区别主要在于“C”与“P”的区别和各自产生的事件流。
MVP存在的问题:
MVVMModel-View-ViewModel 模型-视图-视图模型。 写在最后在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。 如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧! 加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。 35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。 中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 14:23:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |