关于 MVC 的定义介绍,摘一段百度百科介绍:

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

简单也可以这样理解,View 单纯负责 UI,如果要更新 UI 数据,则去调用 Controller,让 Controller 去控制 UI ,Controller 不生产数据,数据层都在 Model 中,而 Controller 持有 Model 层引用,所以它会调用 Model 层然后接受到数据,接着分发给 UI,整个流程就类似于这样。

实际上,这就是一种简单的分层机制,不同的层次做不同的事,让代码结构更清楚,各层职责也清楚,不用把所有逻辑写一块,导致代码臃肿,而且复用性也差。


在 16、17 年左右,Android 领域大家突然开始讨论 MVP,也有很多人讨论两者的区别,实际上,个人觉得 MVC 跟 MVP 几乎没啥差别,同样的思想只是换了一个名字而已,Controller VS  Presenter,都是控制器的角色。

MVP  为什么在 Android 中被大家所讨论,最主要的原因还是由于 Activity 机制。每一个 Android 开发大都是从写 Activity 开始,一个界面对应一个 Activity,所以一开始业务简单的时候,大家会很容易的把所有的操作逻辑都写在 activity 里,这很正常,因为 Activity 就是这么一个机制,Google 就是这样设计的。

后来软件规模越来越大,Activity 中的代码越来越多,代码越来越难以维护,原来在 Activity 中堆代码的机制就受到了考验。实际上,如果正确利用 MVC 模式完全可以解决 Activity 臃肿问题,只不过后来同样用了分层模型去解决问题,但是给这个模型起了另外一个名字 — MVP。

实际上,MVC、MVP 不重要,重要的是去理解正确的软件开发理念。分而治之,各司其职永远都是软件开发的真谛。

链接

2019-04-19:请谈谈你对 MVC 和 MVP 的理解? · Issue #33 · Moosphan/Android-Daily-Interview

最新文章

  1. 关于SubSonic3.0未处理InvalidOperationException异常(关键字TOP附近有语法错误)的处理
  2. 错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 备份错误。
  3. Qt持久性对象进行序列化
  4. Non-constant Fields in Case Labels
  5. sql模糊查询
  6. 2013 Multi-University Training Contest 1 Cards
  7. 微信多媒体上传图片,创建卡券上传 LOGO
  8. python乱码处理
  9. 查看Linux某个进程打开的文件句柄(file descriptor)数量
  10. 设计模式(十):Decorator装饰者模式 -- 结构型模式
  11. poj 1860 (Bellman_Ford判断正环)
  12. Android - 位置定位(Location)服务(Service)类的基本操作
  13. Codeforces Round #265 (Div. 2) C. No to Palindromes! 构建无回文串子
  14. 201521123051《java程序设计》 第五周学习总结
  15. Day-1:初识开发板与基础知识
  16. 企业级应用TOMCAT
  17. Heap
  18. 关于redis分布式锁实现原理
  19. JS基础——原型和原型链
  20. 了解计算机与操作系统发展阶段--Windows

热门文章

  1. osi7层模型及线程和进程
  2. java:Conllection(List,set,get,map,subList)使用
  3. 多对多关系表的创建方式、forms组件
  4. Linux kswapd0 进程CPU占用过高
  5. js去重的es6做法和es5做法
  6. for-in语句和with语句、break和continue语句
  7. HDU 4348 SPOJ 11470 To the moon
  8. DesignWare I2C模块的验证
  9. 使用GOGS搭建自己的Git托管
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_2_编码引出的问题_FileReader读取GBK格式文件