惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

Backbone.js

关于BackboneJS中extend实现的理解 - V2EX Backbone.js的兼容性怎么样?ie6能支持吗 - V2EX backbone.js的例子问题 - V2EX 有用过Backbone的吗,backbone在不同路由跳转的时候可以从服务器取模板吗?还是说要所有的模板都要取回来? js模板过于集中的问题 请问国内有什么关于Backbone.js的社区么? - V2EX
渣渣想请教下有关backbone的一点入门理解问题
Tankpt · 2013-12-17 · via Backbone.js
FrankFang128

9

FrankFang128      2014 年 1 月 23 日   ❤️ 2

MVC 对于 JS 来说,是舶来品,同时是必需品。
先说为什么是舶来品。因为 MVC 前几年和 JS 一点关系也没有。MVC 常用在后台程序里,PHP 的 MVC 框架多了去了。我就大概的介绍下,我写后台也没写多久。
一般来说 MVC 都有一个 R(Router,即路由),不懂这个概念没关系,先来看看程序员怎么用 Router。
假设我们用 PHP 实现一个 MVC 的 Todo 网站,那么一个熟悉 MVC 的后台开发人员首先要「设计 URL」
http://example.com/todo/list 这个页面用来展示 todo list
http://example.com/todo/add 用于添加 todo
暂且就要这两个URL吧。Router 的作用就是根据 url,找相应的代码来负责响应(Router 本身不负责响应)。

Router 的实现

if url is /todo/list
> then call somebody to show the list page
if url is /todo/add
> then call somebody to show the adding page
if url is /todo/remove

那么谁来当这个 somebody 呢?它就是 Todo 类,这个类有 list 和 add 两个方法。看上去很完美的样子。为什么 Router 不直接做出响应,非要 Todo 类响应呢?分工明确嘛。

这个 Todo 类,被命名为控制器C(为什么叫控制器?因为待会它要控制 Model 和 View)

Todo 的实现

function list
> get all the todo MODELs
> generate a VIEW with the MODELs
> RESPONSE the user with the VIEW

RESPONSE 就是向浏览器发送页面的意思,而 VIEW 差不多就是页面的意思,MODEL 呢?当然是数据。
数据可以是从数据库里得到的。这里你就看到 Controller 是如何在操纵 View 和 Model 了。

function add
> if METHOD == get
> > RESPONSE with the adding VIEW
> if METHOD == post
> > get todo name from the post params
> > generate a MODEL with the todo name
> > save the MODEL (to mysql)
> > RESPONSE with the success VIEW

add 方法首先判断 METHOD 是 get 还是 post。如果是 get(当你在浏览器里输入一个网址时,就是在 get 该网址),就展示添加页面,这个页面可能是一个表单,几个输入框,一个提交按钮。当用户点击提交时,就是 post 了一个请求。如果 METHOD 是 post,就新建一个 model,存到 mysql,然后向用户返回一个成功页面(success VIEW)

MVC 的流程基本就是这样了。
为什么是 MVC?因为通用。哪个网站没有 Model(数据),除非你是全静态网站;哪个网站没有 View(页面HTML)。而 Controller,是为了解藕,Model 现在只负责数据了,View 只负责页面 HTML,那么其他的脏活累活谁做?Controller。 Router 是来干什么的呢?活太多了,需要多个 Controller 来做,是不是需要一个监工/指挥/经理呢?比如现在这个 Todo 网站允许用户注册了,是不是需要一个 User 类来负责登录、注册呢?Router 就是给他们俩指派任务的人。

我理解的后台 MVC 就是这样了。
晚了,前端的 MVC 下次再讲。