今天公司的测试服务器开小差了,后台被吐槽的体无完肤,虽然我们都知道跟他没有什么关系,但是生活需要乐趣,总要有人背锅,哈哈!~~~暂时没有环境开发了,那就分享一下之前做的一篇关于Android开发模式的总结,MVC,MVP,MVVM对于刚了解或者没有好好归纳总结的朋友来说,特别是那些像我记性很差的朋友来说,很容易忘记。

下面我们一起归纳总结一下,这样屡清楚他们的关系我们用起来就可以迎刃有余,也不会再面试的过程中逊色于那些背书党了。毕竟我们是属于行动派的:

不知道为何我会想起一个成语叫:万佛朝中,好吧,就用这个来做标题吧

目录

万佛朝中MVX(MVC、MVP、MVVM)

常见问题

错误一:VX层处理业务逻辑,做了M层的工作!

错误二:Model就是静态的业务逻辑数据

错误三:Model 层就是负责数据获取的

错误四:Model 层依赖 Presenter/ViewModel 层

总结:


万佛朝中MVX(MVC、MVP、MVVM)

MV-C

MV-P

MV-VM

实际上就是MVx(x=C,P,VM...),下面我们通过几个常见的误区来说明这些框架的原理。

常见问题

1、实际关系是:M(业务逻辑)和VX(表现层逻辑),并不是M、V、X并立的

错误一:VX层处理业务逻辑,做了M层的工作!

V层:

负责发送用户操作给X层

负责接收X层传来的控制

X层:

处理几乎所有的表现层逻辑。(为什么?这样方便进行单元测试)

M层:

Model 层包含了业务数据

以及对业务数据的操作 (behaviour and data)

错误二:Model就是静态的业务逻辑数据

我们做业务模块开发时,会经常定义一些数据结构,比如User类、Order类等Bean类。只有一些简单的get和set方法。有人认为这样的数据结构就是Model。一个数据结构实例没有行为,连对象都称不上,怎么能代表 Model 层呢!

静态的业务数据不能代表 Model 层,业务数据以及针对业务数据的操作共同构成了 Model 层,这也就是业务逻辑。

所谓的(与表现层VX逻辑区别的)业务逻辑处理就是网络请求、数据库查询等数据获取逻辑,即Model层就是负责数据获取的,这也是我要说的第三个错误观点。

错误三:Model 层就是负责数据获取的

业务逻辑层并不负责数据的获取,数据的获取职责还要在 Model 层的更下层,这也是为什么我要把的 BlogModel 的实现逻辑写得如此简单,因为数据获取的职责全部交给了 BlogFeedRepository 类,Model 层只处理业务逻辑。

BlogFeedRepository 是博客列表的仓储类,BlogModel 通过 BlogFeedRepository 的 fetch() 方法获取标签为 recommend 的博客列表,也就是推荐的博客列表。

错误四:Model 层依赖 Presenter/ViewModel 层

实际上应该是 Presenter/ViewModel 通过接口的形式依赖 Model 层,Model 层完全不依赖 Presenter/ViewModel。就像我前面的示例代码里一样,Model 层必然不会出现任何 presenter 这样的单词,上层通过观察者模式来监听 Model 层的数据变化( LoadCallback 接口也算是一种),Model 层也不用关心上层是 Presenter 还是 ViewModel。

总结:

其实关于 MVX 还有更多可以讨论的,比如有些人认为 Model 层并不是真正处理业务逻辑的地方,它只是业务模块的一个上层封装层(下面包含真正数据获取,业务逻辑处理就是网络请求NetWorkDataReponsity、数据库查询SQLDataRepository 等数据获取逻辑),我觉得也不无道理,在复杂业务模块中,业务是存在层次的,MVX 中的 Model 层是所有业务层中的最上层。

还有我刚刚提到的业务层之下还有数据层,这是典型的三层架构的概念,即表现层、业务层和数据层。逻辑存在分层,所以架构也必然要进行分层,MVX 可以做为我们从代码到业务甚至到架构的探索的开端。

Android开发模式万佛朝中MVX(MVC、MVP、MVVM)相关推荐

  1. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

  2. Android中常见的MVC/MVP/MVVM模式

    Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Re ...

  3. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...

  4. Android架构设计之MVC/MVP/MVVM浅析

    目录 写在前面 一.案例演示 二.MVC模式 2.1.MVC简介 2.2.MVC模式的使用 2.3.MVC模式的缺点 三.MVP模式 3.1.MVP简介 3.2.MVP模式的作用 3.3.MVP模式的 ...

  5. 表现层持续解耦带来的模式转变 MVC MVP MVVM

    ---微软WPF带来的团队变化和软件技术变化  Model-View-ViewModel是一种架构模式,主要在WPF.Silverlight和WP7开发里使用,它的目标是从视图层移除几乎所有代码隐藏( ...

  6. java mvc mvp mvvm_一篇文章了解架构模式:MVC/MVP/MVVM

    架构模式的文章很多,好理解的没有几个.大部分文章出现的主要问题有: 没有设定好作用域:前端MVC是改造过的MVC,和后台MVC有明显的区别,不能一概而论 没有实际的例子:实际的例子对应日常的工作,没有 ...

  7. Android 系统(77)---MVC,MVP,MVVM的区别

    MVC,MVP,MVVM的区别 一.MVC 软件可以分为三部分 1.Model:模型层,负责处理数据的加载或者存储  2. View:视图层,负责界面数据的展示,与用户进行交互  3.Controll ...

  8. iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER

    看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...

  9. iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...

最新文章

  1. 华为云春节前夕遭连续偷袭!密谋3个月,专挑凌晨断网
  2. python中plot柱状图-python matplotlib模块: bar(柱状图)
  3. 渲染好的页面怎么转为图片_图片导成PDF后页面大小不同怎么办
  4. 958. 二叉树的完全性检验 golang
  5. 【算法系列之十一】k个一组翻转链表
  6. PHP 魔术方法__set() __get() 方法详解
  7. AR热度不在? NO! 三星开发者大会将聚焦AR
  8. Java json拼接字符串_Java中拼接json格式字符串
  9. MOSS项目开发 周记(第一周)
  10. 转载:SharePoint技术资料
  11. React Native npm镜像安装命令
  12. 共享图书管理系统数据库实现
  13. 笔记(四)Home Assistant添加小米设备
  14. CSS - 禁止手机移动端网页缩放(meta)
  15. 计算机组成的了LDAR,静态存储器实验报告
  16. 【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数
  17. 微信小程序获取地理位置,用户未开启手机定位时的解决方案
  18. 2019前端最全面试题
  19. 不忘初心,专心练剑!
  20. 2022年5月3日-4日 复盘计划

热门文章

  1. 玩转华为ENSP模拟器系列 | 配置IS-IS基本功能示例
  2. python科学记数法转化格式_将科学记数法转换为F
  3. OpenCV+ip摄像头实现远程实时监控
  4. 【BZOJ3470】Freda’s Walk 概率与期望
  5. python重量转换程序_重量转换的极小项目说python查找字符串
  6. win10环境下创建环境变量
  7. 安全防护与信息加密:一个新的挑战
  8. VB6.0 让函数返回一个值
  9. 分布式一致性协议Raft,以及难搞的Paxos
  10. 性能强悍的CSS动画库--Animate.css