以知乎为例子来说明MVC是个啥

        记得当时了解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
来源:知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/S架构网络聊天软件——Java Chat Application 用java做一个聊天机器人

Fighting!一、C/S概念1.1 什么是C/S1.2 C/S与B/S的区别二、主页面三、介绍四、特征五、jServer六、jMessenger七、使用代码7.1 导入项目后报错情况7.2 解决办法一、C/S概念 1.1 什么是C/S C/S分布式模式,是计算机用语。C是指Client,S是指Server&#xf…

【文章】浅相遇,薄相知,淡相守,终难忘

浅相遇 人生犹如一场戏,在每一个转折点,总有意想不到的邂逅。 有的相遇成歌,注定了在这绻绻红尘中,相携而去。有的转身为念,注定了行色匆匆,独自而行。 其实,上苍是公平的。在为我们关上一扇…

学习python 正则表达式——与你同行!

正则表达式定义 又称为规则表达式,是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个‘规则’,检查一个字符串是否与这种规则匹配来实现对字符的检索、过滤、匹配、替换。正则表达式需要用到re模块,该模块…

python 编译procto错误处理

运行:python -m grpc_tools.protoc --proto_path. --python_out. --grpc_python_out. helloworld.proto 出现如下错误: helloworld.proto: No such file or directory 解决方案: 解决方法一: cd 到helloworld.proto 的根目录 …

【Python】function、module、Package及import导入方法

计算机程序开发中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里面,这样,这个文件包含的代码就相对…

学习《数据结构》要爬的第一步梯子

小王开始专业课的复习一、数据结构是什么二、数据结构中基本概念和术语2.1数据结构的概念2.2按照不同功能划分逻辑结构2.3存储结构中重点顺序存储举例链式存储举例三、抽象数据类型的表示与实现3.1数据类型3.2抽象数据类型 (ADTs: AbstractData Types)3.…

python gRPC测试helloworld

一、测试helloworld 1、在https://github.com/grpc/grpc 下载example 2、用cmd打开命令行,cd到helloworld的根目录 cd E:\pythoncode\gRPC\grpc-master\grpc-master\examples\python\helloworld 然后运行 python greeter_server.py 3、再用cmd打开另一个命令行…

k52zip shell band 流氓软件总是显示~

小王的烦恼问题Garbage解决办法解决一解决二解决三总结问题 (我都不知道这流氓软件哪里来的,平时也就下点学习资料啥的) 一打开电脑学习给我整蒙了下方工具栏左右两边平白无故整两条杠出来 电脑下方工具栏处右击——》点击工具栏——》取消勾…

Microsoft Visual Studio 无法启动程序“路径啪啦啪啦“. 系统找不到指定的文件。

遇到这个低级错误 点击出现 解决办法 我看了好久,心态都崩了,结果是我两个cpp文件都有main函数,注释掉一个main函数就行了。这种错误可不要再犯了,搞心态。

【Python】Windows下Python3虚拟环境搭建

我们知道python中,有些第三方库的包会有依赖关系,比如某天你想搭建django环境,它可能依赖某个package 2.0,然后过几天你又想要搭建其他环境,这时候可能它也需要同样的包,但是这个包的版本可能不需要那么高&…

pycharm+pyqt5配置

1、打开cmd输入pip3 install PyQt5 2、输入pip3 install PyQt5-tools -i https://pypi.doubanio.com/simple 3、打开pycharm。新建项目点击Setting--》Tools--> (1)添加Qtdesigner (2)添加PyUIC 4、点击 5、打开Qtdesigner。新建一个ui文件。保存在…

立志10天学会C++基础应用—day01

文章目录前言第一天感觉很实用的快捷键一、常识A01打印cHelloWorld.cppA02变量.cppA03常量.cppA04标识符命名规则.cppA05整型.cppA06sizeof的用法.cppA07实型.cppA08字符型.cppA09转义字符.cppA10字符串类型.cppA11布尔类型.cppA12数据的输入.cpp二、算术运算符A13算术运算符.c…

【Python】IDE环境Pycharm运行虚拟环境Django

上一篇文章我们通过举例介绍了如何安装RobotFramework虚拟环境,其实Django环境也可以通过相同办法安装 f: cd F:\python_env python -m venv Django_env F:\python_env\Django_env\Scripts activate pip install Django 这样我们就在虚拟环境下安装了Django&#x…

pycharm导入自己写的模块时,模块下方出现红色波浪线的解决方案

这种情况其实可以不用管,是可以正常运行的; 但是,如果看着不舒服,可以进行以下过程进行设置即可: file->settings->project->project structure->点击项目路径->点击Excluded。然后确定就正常显示了…

立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了

哈喽,很高兴又见面啦,一起加油一起学习,欢迎您的关注!https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸,一起进步是我的动力,明天也一起加油啊! 以往链接 立志10天学会C基…

Python3导入自定义模块的3种方式

关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000) 模块是个好东西啊,大牛们开源共享许多…

Flask项目的部署详解

哈喽,很高兴又见面啦,一起加油一起学习,欢迎您的关注!https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸,一起进步是我的动力,明天也一起加油啊! 目录宝塔更新Python版本apt安…

【Python】对象、类、元类

龟叔发明了Python,然后集成了一堆概念在这门语言里面,比如:迭代器,装饰器,函数,生成器,类,对象,协程等等。 这些概念对初学者似乎没一个好懂的,不过还有比这更…

JETBRAINS开发工具中Translation翻译插件的使用

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究&#xf…

【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件,但是有时候我们也想要将pdf文件转换为word或者txt文件,方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。 说明:本文是在Windows10下使用python最新的3.6版本虚拟…