SlideShare a Scribd company logo
1 of 50
前端MVC探讨及实践 李燕青(霸先)@淘宝
About me 李燕青(Taobao花名:霸先) Twitter:@enmaai Weibo:@enmaai Email:freyaoo@gmail.com 2007-2009 中国雅虎UED 2009-NOW 淘宝UED
议题 Why What 传统MVC 现有前端MVC框架 前端MVC 湖畔前端MVC实践 总结及反思
Why
TrygveReenskaughttp://heim.ifi.uio.no/~trygver/
我创立的Model-View-Controller(MVC)模式作为一个直观的解决方案,针对的是一个一般性的问题,即让用户能够支配自己从多个角度看到的信息。 http://heim.ifi.uio.no/~trygver/TrygueReenskaug http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html 李松峰
MVC引起了的关注之多,让人有点始料不及。有些教材对MVC的改造甚至达到了离经叛道的程度,甚至企图达到让计算机来控制用户的悖谬目的。 http://heim.ifi.uio.no/~trygver/TrygueReenskaug http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html 李松峰
What
MVC的根本目的是在人类头脑中的心智模型和计算机中的数字模型之间架起一座桥梁。理想情况下,MVC的实现方案与用户直接查看和操作领域信息的直觉吻合。假如用户想在不同的上下文中以及/或者以不同的视角看到相同的模型要素,那MVC就有了它的用武之地。 http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html
http://heim.ifi.uio.no/~trygver/
Model http://fc00.deviantart.net/fs71/f/2010/128/4/8/Model_Walk_by_Natsuki_Suzuhara.gif
Model 模型,表示知识。它既可能是一个对象(当然,如果仅一个对象就没多大意思了),也可能是由许多对象组成的结构。 模型及其组成部分是一方,而模型创建者意识中要表现的世界则是另一方,这两方应该一一对应。自然地,模型的每个节点都应该明确对应于问题的一个部分。 模型的所有节点都应该把问题解决到相同的程度,把面向问题的节点(例如,在日程中添加约会活动)与实现细节(例如,用段落展示)混在一起不容易理解,是应该避免的做法。 http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html
View http://farm3.static.flickr.com/2505/4018357910_4dc764621e_z.jpg
View 视图是模型的(可见的)表现。视图通常会突出模型的某些属性,同时隐藏其他属性。从这个意义上讲,视图就像是一个展示过滤器。 视图依赖于模型(或模型的一部分),通过询问问题的方式从模型中获得用于展示的必要数据。视图通过发送适当的消息,也可以更新模型。这些问题和消息都要按 照模型的术语来传达,由此视图必须得知道自己所要表现的模型,它的属性都有什么语义。(比如说,视图可能会询问模型的标识符,期待返回一个Text的实 例,但它可能并不认为模型就是Text类。) http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html
Controller http://browse.deviantart.com/customization/?q=controller#/d3ijqvu
Controller 控制器是用户与系统之间的纽带。它为用户提供输入,即它会将相关的视图显示在屏幕上适当的位置上(供用户浏览查看)。它为用户提供输出的手段,即它会向用 户展示菜单以及其他能接受命令和数据的控件。控制器接收到上述的用户输出,将其转换为适当的消息,然后再将这些消息传递给一或多个视图。 控制器不应该当作视图来用,例如,不能用控制器来画箭头以连接视图的节点。 从另一方面讲,视图也不应该关心用户输入,比如鼠标操作或按键操作之类的。在任何情况下,都应该能够在控制器里编写一个方法,该方法将消息发送到视图,以便原原本本地再现用户的命令。 http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html
传统MVC
http://www.51cto.com/files/uploadimg/20090730/1351240.gif
MVC from Smalltalk(GUI Applications) http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/mvc.html
MVC from Smalltalk(GUI Applications) http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/mvc.html
优点
缺点
MVC前端框架
谁在用
前端MVC
http://www.javascriptmvc.com/
湖畔前端MVC
湖畔
特点
湖畔
Model 使用localStorage和obj storage在本地缓存数据
Model 使用轮询来实现数据更新,所有异步请求使用一个时间戳,服务器通过时间戳来计算更新的数据,服务器可自由调节轮询间隔
Model 当有本地缓存数据的时候使用本地数据而不向服务器请求,除轮询数据更新接口外,其他任意异步接口均可返回更新数据
Model 当有数据更新时,更新本地数据并通知Controller更新View
View 通过View根节点进行事件代理,接收用户输入并反馈给controller
View 维护html模板及进行渲染
JavaScript Template
合适的就是最好的 http://www.carlescapdevila.com/?p=3127
View {{Mustache}}
Why Mustache? 跨平台、语言 模板统一由前端进行开发和维护 后端只关心数据结构,不用关心Html,不用关心页面的显示 数据和模板前后端通用
Mustache并不完美 渲染速度是所有JavaScript模板里最慢的 还有个别的bug,如{}认为是true 要求数据结构为严格的map格式 无法处理[[],[]]这样的结构
Controller 管理history hash及具体业务处理 http://www.hupan.com/home.htm#!topic=129016
Controller 管理history hash及具体业务处理
未来 使用long polling和WebSocket来做数据更新 代码结构上的MVC 将history hash管理剥离出来统一管理 使用Web Workers来做一些数据处理
总结和反思 MVC适用于single-page JavaScript application(gmail,twitter); 简单项目如果使用会导致代码量增多,项目变复杂 View和Controller耦合较高,目前的框架对于V和C的定义均不同; 前端可以使用合适的JavaScript模板引擎来提高工作效率 Rich Javascript Application和single-page JavaScript Application会越来越多
Thanks
Q&A

More Related Content

What's hot

輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2Bruce Chen
 
Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手Study4TW
 
ASP.NET MVC之實戰架構探討 -twMVC#5
ASP.NET MVC之實戰架構探討 -twMVC#5ASP.NET MVC之實戰架構探討 -twMVC#5
ASP.NET MVC之實戰架構探討 -twMVC#5twMVC
 
Vs2013新功能介紹 twMVC#11
Vs2013新功能介紹 twMVC#11Vs2013新功能介紹 twMVC#11
Vs2013新功能介紹 twMVC#11twMVC
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC
 
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3twMVC
 
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10twMVC
 
ASP.NET MVC Code Templates實戰開發 -twMVC#4
 ASP.NET MVC Code Templates實戰開發 -twMVC#4 ASP.NET MVC Code Templates實戰開發 -twMVC#4
ASP.NET MVC Code Templates實戰開發 -twMVC#4twMVC
 
Mvvm及其组件体系@杨文坚
Mvvm及其组件体系@杨文坚Mvvm及其组件体系@杨文坚
Mvvm及其组件体系@杨文坚正炎 高
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4twMVC
 
輕鬆上手Asp.net web api 2.1-twMVC#14
輕鬆上手Asp.net web api 2.1-twMVC#14輕鬆上手Asp.net web api 2.1-twMVC#14
輕鬆上手Asp.net web api 2.1-twMVC#14twMVC
 
一小時可以打造什麼服務Plus twMVC#18
一小時可以打造什麼服務Plus twMVC#18一小時可以打造什麼服務Plus twMVC#18
一小時可以打造什麼服務Plus twMVC#18twMVC
 
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日twMVC
 
twMVC#22 | 什麼鬼的IOC與DI
twMVC#22 | 什麼鬼的IOC與DItwMVC#22 | 什麼鬼的IOC與DI
twMVC#22 | 什麼鬼的IOC與DItwMVC
 
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式Chui-Wen Chiu
 
開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15twMVC
 

What's hot (17)

Asp.Net Mvc 1.0
Asp.Net Mvc 1.0Asp.Net Mvc 1.0
Asp.Net Mvc 1.0
 
輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2
 
Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手
 
ASP.NET MVC之實戰架構探討 -twMVC#5
ASP.NET MVC之實戰架構探討 -twMVC#5ASP.NET MVC之實戰架構探討 -twMVC#5
ASP.NET MVC之實戰架構探討 -twMVC#5
 
Vs2013新功能介紹 twMVC#11
Vs2013新功能介紹 twMVC#11Vs2013新功能介紹 twMVC#11
Vs2013新功能介紹 twMVC#11
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
 
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
 
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10
 
ASP.NET MVC Code Templates實戰開發 -twMVC#4
 ASP.NET MVC Code Templates實戰開發 -twMVC#4 ASP.NET MVC Code Templates實戰開發 -twMVC#4
ASP.NET MVC Code Templates實戰開發 -twMVC#4
 
Mvvm及其组件体系@杨文坚
Mvvm及其组件体系@杨文坚Mvvm及其组件体系@杨文坚
Mvvm及其组件体系@杨文坚
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
 
輕鬆上手Asp.net web api 2.1-twMVC#14
輕鬆上手Asp.net web api 2.1-twMVC#14輕鬆上手Asp.net web api 2.1-twMVC#14
輕鬆上手Asp.net web api 2.1-twMVC#14
 
一小時可以打造什麼服務Plus twMVC#18
一小時可以打造什麼服務Plus twMVC#18一小時可以打造什麼服務Plus twMVC#18
一小時可以打造什麼服務Plus twMVC#18
 
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
 
twMVC#22 | 什麼鬼的IOC與DI
twMVC#22 | 什麼鬼的IOC與DItwMVC#22 | 什麼鬼的IOC與DI
twMVC#22 | 什麼鬼的IOC與DI
 
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式
 
開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15
 

Similar to 前端Mvc探讨及实践

KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)Bruce Chen
 
MVC MVVM MVVMC
MVC MVVM MVVMCMVC MVVM MVVMC
MVC MVVM MVVMCNg Hui Qin
 
twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC#22 | 一個微信專案從0到.000的效能調教之路twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC#22 | 一個微信專案從0到.000的效能調教之路twMVC
 
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1twMVC
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎Gelis Wu
 
ASP.NET MVC 快速上手
ASP.NET MVC 快速上手ASP.NET MVC 快速上手
ASP.NET MVC 快速上手Study4TW
 
twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC#10 | ASP.NET MVC Model 的設計與使用twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC#10 | ASP.NET MVC Model 的設計與使用twMVC
 
Angular js入门分享 by 王栋
Angular js入门分享   by 王栋Angular js入门分享   by 王栋
Angular js入门分享 by 王栋栋 王
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4Duran Hsieh
 
Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘Zhenhua Tang
 
ASP.NET MVC 5線上課程(入門前三天)
ASP.NET MVC 5線上課程(入門前三天)ASP.NET MVC 5線上課程(入門前三天)
ASP.NET MVC 5線上課程(入門前三天)MIS2000 Lab.
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Kyle Shen
 
twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充twMVC
 
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰twMVC
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Jollen Chen
 
twMVC#13 | ASP.NET MVC 分頁與排序相關技巧
twMVC#13 | ASP.NET MVC 分頁與排序相關技巧twMVC#13 | ASP.NET MVC 分頁與排序相關技巧
twMVC#13 | ASP.NET MVC 分頁與排序相關技巧twMVC
 
ASP.NET MVC简介
ASP.NET MVC简介ASP.NET MVC简介
ASP.NET MVC简介Du Wanzhi
 
ASP.NET MVC The Begining
ASP.NET MVC The BeginingASP.NET MVC The Begining
ASP.NET MVC The BeginingSimon Huang
 
MVVM.pptx
MVVM.pptxMVVM.pptx
MVVM.pptxbinlu33
 

Similar to 前端Mvc探讨及实践 (20)

KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
 
MVC MVVM MVVMC
MVC MVVM MVVMCMVC MVVM MVVMC
MVC MVVM MVVMC
 
twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC#22 | 一個微信專案從0到.000的效能調教之路twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC#22 | 一個微信專案從0到.000的效能調教之路
 
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎
 
ASP.NET MVC 快速上手
ASP.NET MVC 快速上手ASP.NET MVC 快速上手
ASP.NET MVC 快速上手
 
twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC#10 | ASP.NET MVC Model 的設計與使用twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC#10 | ASP.NET MVC Model 的設計與使用
 
Angular js入门分享 by 王栋
Angular js入门分享   by 王栋Angular js入门分享   by 王栋
Angular js入门分享 by 王栋
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
 
Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘
 
ASP.NET MVC 5線上課程(入門前三天)
ASP.NET MVC 5線上課程(入門前三天)ASP.NET MVC 5線上課程(入門前三天)
ASP.NET MVC 5線上課程(入門前三天)
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
 
twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充
 
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
 
twMVC#13 | ASP.NET MVC 分頁與排序相關技巧
twMVC#13 | ASP.NET MVC 分頁與排序相關技巧twMVC#13 | ASP.NET MVC 分頁與排序相關技巧
twMVC#13 | ASP.NET MVC 分頁與排序相關技巧
 
ASP.NET MVC简介
ASP.NET MVC简介ASP.NET MVC简介
ASP.NET MVC简介
 
ASP.NET MVC The Begining
ASP.NET MVC The BeginingASP.NET MVC The Begining
ASP.NET MVC The Begining
 
MVVM.pptx
MVVM.pptxMVVM.pptx
MVVM.pptx
 

前端Mvc探讨及实践