记得当时了解Web开发的MVC(Model-View-Controller)模式后,有一种心血喷涌的感觉,觉得太有意思了(程序员别喷,我就是这么没见过世面)。我们以知乎为例子来说明MVC是个啥:

每个人的主页都是相同的布局和风格,例如最上面的菜单搜索栏,颜色分割,左边显示动态等,右边是个人信息等,然后具体的内容却因人而异—每个人的头像,名字,动态都是不一样的。那么知乎是如何保证每一个人看到的都是自己的主页呢?

你可以把这个相同的布局想象成一个模板,里面有一个个空格子,当你用你的账户登陆页面时,想象你的电脑里有无数个小人根据你的账号从知乎后台的数据库里取出你的头像,动态,认证信息等等内容,然后对应着模板上规定好的位置,把对应的内容填进去。这些小人的动作实在是太快了,以至于你觉得这是在瞬间完成的。

上面所说的模板就是MVC中的V,是View的缩写,负责显示。这样做的好处在于,如果知乎有一天突然想改变一下个人主页的风格,那么只需要改变这一个模板,然后几千万注册用户的主页就相应的变化了,因为模板是公用的,是不是省了很多事情?(早期的Web开发可不是这样哟,你可能要一个个用户去改,非常麻烦。)

而这些小人除了摆放内容,它们真正负责的是业务逻辑,我们把他们叫做Controller,也就是MVC中的C。例如当你登陆的时候,这些小人要检查你的用户名是不是准确的,如果准确,它们要去数据库里取出你请求的信息等,如果用户名错误,它们要拦截住你的登陆。它们的职责还有很多,无法一一列举。在实际中,这些小人做的事情其实就是Python(或者其它脚本语言)做的事情。

最后,MVC中的Model其实就是传给View的数据,包括上面的头像,用户名,动态等因人而异的数据。这些数据在知乎服务器上是以数据库表格(table)的形式存在的,你可以把它们想象成很多不同的excel表格,不同的表格储存着不同的信息,有些记录着知乎用户的个人信息,有些记录着回答,有些记录着评论等等,而这些表格之间又彼此联系,当你在知乎的不同网页间跳转的时候,上面说的那些小人就根据你的要求,组合对应的表格取出对应的数据,然后把他们放到模板对应的空格里,发送给浏览器。然后浏览器根据你写的CSS,用不同的颜色,大小等等,将数据很漂亮的显示出来。

这样做的好处是什么呢?虽然你最终在浏览器里看到的是一个完整的页面,但是在后端逻辑上它们都是区分开的——模型(M),视图(V)和控制器(C)的区分就保证了较高的可维护性——我可以随时修改主页的显示并看到效果,同样我可以随时加入一些业务逻辑。

简单来说,MVC指Controller控制器根据不同情况获取Model数据,处理后传给View模板进行显示。

作者:赛门喵Simon
链接:https://www.zhihu.com/question/29138020/answer/141170242
来源:知乎

以知乎为例子来说明MVC是个啥相关推荐

  1. jsp过时了吗_知乎高赞:Spring MVC 过时了吗?网友:你连V和C都还没搞明白~

    喜欢就关注我们吧! 问题:Spring MVC 过时了吗? 我看了一下这个问题的日志,这个问题是2018年9月提出来的. 那么好,首先给出结论:Spring MVC没有过时,它仍然是当前主流的Java ...

  2. php mvc例子,PHP_ThinkPHP的MVC开发机制实例解析,ThinkPHP是目前国内应用非常广 - phpStudy...

    ThinkPHP的MVC开发机制实例解析 ThinkPHP是目前国内应用非常广泛的一款MVC开发框架.本文就以实例形式解析ThinkPHP的MVC开发机制.相信会给大家一定的启发作用.具体分析如下: ...

  3. 如何零基础开始自学Python编程

    0. 明确目标 我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架).相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点.我把我的学 ...

  4. 如何零基础开始自学Python编程,值得一看!

    0. 明确目标 我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架).相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点.我把我的学 ...

  5. 零基础学python-如何零基础开始自学Python编程

    转载--原作者:赛门喵 链接:https://www.zhihu.com/question/29138020/answer/141170242 0. 明确目标 我是真正零基础开始学Python的,从一 ...

  6. 六星教育python怎么样_六星教育:Python怎么学?自学Python经验分享

    近些年,随着人工智能.大数据.自动化运维等行业的兴起,Python在编程方向上得天独厚的优势也凸显出来.随着Python工程师需求的日益增多,Python薪资也随之水涨船高.学习Python的同学越来 ...

  7. 1. 我的自学编程之路

    我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架).相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点.我把我的学习过程写在下面, ...

  8. 经验分享:如何零基础开始自学Python编程(上)

    1.明确目标 我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架).相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点.我把我的学习 ...

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

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

最新文章

  1. HDU-1569 方格取数(2) 最小割最大流
  2. Maven环境搭配及继承
  3. 基于CSS3实现水平轮播效果
  4. MLE(最大似然估计)和EM算法
  5. 高并发编程知识体系阅读总结
  6. 尝试:以下矩阵size length ndims repmat isempty ismatix E=A(:,[1:3:5])什么意思?
  7. 【重点】LeetCode 124. Binary Tree Maximum Path Sum
  8. mysql常用监控脚本命令列表
  9. 【数据结构】班级管理系统
  10. 面试题:数据库的优化
  11. springboot 架构图
  12. 华为云薛浩:走进视频“新时代”
  13. 信息系统服务器维护,信息系统运行维护服务方案(IT运维服务方案)-20210729025444.pdf-原创力文档...
  14. matlab基础编程,Matlab 编程入门(一):编程基础
  15. 每日分享正能量一段话45句
  16. 图难于其易,为大于其细。天下难事,必作于易;天下大事,必作于细--《道德经》...
  17. Android打印小票速度太慢,解决打印PDF打印机打印速度慢的问题(适用所有打印机)...
  18. eMMC SD/eMMC寄存器介绍
  19. 【每周一篇】推荐算法之威尔逊区间法
  20. 改进的节点分析法(Modified Nodal Analysis)

热门文章

  1. 在c语言中预处理命令行都以井号开头,以井号开头的行和gcc预处理器输出中的'#1“ac”'之类的数字是什么意思?...
  2. python手机安装模块_python如何安装模块 模块安装操作教程
  3. java数组更新_java刷新数组到jList
  4. python self 值自动改变_Python,为什么传递和更改带有外部函数的类selfvariable用于操作iterable而不是变量...
  5. 计算机中字长名词解释,《计算机科学概论》复习题(内含参考答案)
  6. Java多线程 —— 线程状态迁移
  7. String StringBuilder StringBuffer三者之间的区别~~~
  8. stm32高级定时器 基础知识
  9. Windows底层窗口的实现———学习笔记
  10. jsp java循环读取json_JAVA JSON遍历问题,求解(内附代码)