简言MVC
- 什么是MVC?
MVC是一种代码的组织结构,在一个工程项目中,将代码的数据处理,逻辑单元和交互部分分离开来达到一种低耦合的效果,便于工程的修改。MVC中M代表Model,V代表View,C代表Controller。其中Model负责对数据进行组织,而View负责数据的呈现和与大家的交互,C负责连接View和Model单元,用于处理事务的逻辑。MVC的结构使得数据的呈现和数据的处理和维护分离开来,便于程序的修改。

- MVC的优点
MVC最显著的优点就是逻辑清晰,代码之间耦合度相对来说较低,便于团队之间的分工和合作。这一点在工程中比较重要,当工程变得比较巨大的时候,代码之间应尽量减少交叉,避免后期对代码迭代的时候进行大范围的改动,可以说MVC是面向对象逻辑的进一步的封装。打一个不是很恰当的比喻,面向对象的技术就像是在培养能够干活的工人,而MVC则是将这些工人组织成为工厂。如果理解现在大工程的分工合作模式,我们就知道MVC的魅力之所在, MVC并没有直接提高了计算速度的功能,而是提高了开发者的开发速度,可以说MVC是一个程序员管理代码的管理模式。
- MVC的缺点
MVC缺点的话,就是三者之间的分工并不是均衡的,一般来说controller的工作量较大,仍然显得有些臃肿。MVC只算是一个轻量级的管理模式,所以比较适合小团体之间的合作。对于一些小的程序,用MVC这么高大上的东西又显得有些多此一举。
经过上面的一些叙述,相比大家仍然不会很清楚什么是MVC,不过只需要记住,MVC就是三块,一块是数据,想要什么数据就从那里面拿,一块是逻辑,想要拿数据必须要经过他,最后一块是呈现。记住了这些,我们就来看看MVC在前台是怎么工作的,当前web前台的MVC有很多可以利用的框架,比如Angular、Backbone、CanJS与Ember,这里主要讨论下MVC在Backbone里是怎么封装起来的。

Backbone.js应该是一个比较轻量级的MVC框架了,压缩后的代码只有8 KB,代码总长度也不过1000多行(包括注释)。不过不要欣喜太早,这并不代表你在使用的时候只需要这1000行代码就足够了,如果你想要更加便捷的使用Backbone.js,你就需要一些其他的库来辅助了,不过也不用担心,和其他框架相比,这个真的是十分轻量级了。
Bockbone.js做了哪些事情呢?
- 对事件处理进行了重新封装。。
- 封装了Model, View对象。
- Router进行连系Model和View。
在介绍Bockbone之前,我们先介绍下SPA的概念。
SPA = Single Page Application,简而言之,就是说你的网站只有一个网页。这有什么好的呢?这样的话网页元素不都挤到一起了么?好像没有那么简单。SPA通过局部刷新的技术,只是将我们想要看到的元素呈现出来而已。考虑到用户越来越慵懒的行为习惯,你就明白Single-Page-Application是很有应用前景的。许多用户在浏览网页的时候总是讨厌打开新的标签,我们如果能停留在一个网页上完成我们最想做的操作,肯定是最好的了,谁愿意每操作一个按钮就看到一个加载图标在不停的打转呢。同时使用SPA,网站整体风格就比较容易控制了,在没有局部刷新以前,我们的网扎需要模板这个东西来保证网站的风格保持一致,但是这样仍然无法避免网页之间交互的麻烦,很多的操作我们都要把前台的数据提交到后台,在把后台的数据发送到前台,这既浪费了带宽,同时更重要的是牺牲了用户的体验。所以我们希望的网页是,网站的后台只相当于一个数据仓库,而所有的处理部分完全在前台执行,这减轻了服务器的负担,提供的服务器服务的效益。可能有人要怀疑前台的能力了,如果我们在后台进行处理,我们可能会用到更加C, C++等编译性语言来处理我们的计算从而来提高计算的性能,但在前台我们只能依赖js脚本了,同时脚本所面临的环境并不如服务器那么稳定,他值得信赖吗?当然,js能代替后台完成一些操作,一些比较关键性的服务当然我们也会考虑放到后台来操作以保证安全,不过也不必怀疑js的计算能力,不是还有一个狂拽酷霸屌炸天的googleV8引擎的么。
我们队前台的要求高了,如果只把js当做简单的脚本,用来实现一些比较好看的展现效果来用就有些不合时宜了,这时我们就需要一些框架来维护我们的前端代码了,这就是backbone.js了。
By 王需
简言MVC的更多相关文章
- 简说MVC Filter
Filter与FilterProvider之间的关系 根据用途和执行时机的不同,MVC主要分为以下5种类型的过虑器:AuthenticationFilter.AuthorizationFilter.A ...
- 简说mvc路由
首先我们通过在Global.asax中的Application_Start将路由信息注册到RouteTable的Routes静态属性中.如下代码所示: public class RouteTable ...
- WPF 杂谈——开篇简言。
这俩年多来笔者一直在从事关于WPF的开发.虽然不能说是专家级别的.但是对于WPF的应用还是有一定的了解.论他的灵活性决对不在WinForm之下.WPF的出现更是引发一段热议.他的何去何从更是让很多人感 ...
- WPF 杂谈——开篇简言
这俩年多来笔者一直在从事关于WPF的开发.虽然不能说是专家级别的.但是对于WPF的应用还是有一定的了解.论他的灵活性决对不在WinForm之下.WPF的出现更是引发一段热议.他的何去何从更是让很多人感 ...
- Java进击C#——应用开发之Asp.net MVC
本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...
- MVC Controller的激活
各Controller的继承关系 Controller最重要的是对Execute方法的调用,当目标Controller对象被激活后,对请求的后续处理和最终响应均是通过执行这个Execute方法来完成. ...
- Java进击C#——前言
本章简言 记得三年前笔者来到现在的公司的时候,公司人口不出十个人.那个时候笔者刚从日本回来,想在福州.厦门.青岛找一个合适自己发展的机会.最后我的一个福州的朋友打电话希望我能过去帮他,跟他一起创业.这 ...
- Struts2 源码分析——Result类实例
本章简言 上一章笔者讲到关于DefaultActionInvocation类执行action的相关知识.我们清楚的知道在执行action类实例之后会相关处理返回的结果.而这章笔者将对处理结果相关的内容 ...
- Struts2 源码分析——前言
笔者简言 笔者在博园里面注册是在二年前.可是那个时候我不知道要写些什么,也怕写出来被别人骂误人子弟.而现在却动笔了是因为前一段时间内我去参加一些大公司的面试,让笔者内心深处留下很多问号.最近三年来我一 ...
随机推荐
- 【Alpha 冲刺】 7/12
今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 建立数据库 已完成 孙浩楷 完成作业列表界面 已完成 胡冰 完成作业展示页面 已完成 练斐弘 完成课件列表页面 未完成 时间不够 ...
- Django商城项目笔记No.10用户部分-登录接口
Django商城项目笔记No.10用户部分-登录接口 添加url路由 接下来第二步,增加返回内容: 增加结果如下: 配置:上边的方法定义了返回的内容都有哪些,那这个方法jwt还不知道,需要配置: 修改 ...
- jdk1.7环境配置
JDK1.7的环境配置(我的是jdk1.7,文件名写快了,忽略忽略) 官网下载自己需要的版本(ps:我这是朋友发给我的就不提供官网地址,去百度搜jdk就可以了) 下载下来除了改存放路径还有记得再jdk ...
- ArcGIS API for Javascript之专题图的制作(四)热力图渲染(上)
一 .热力图定义 热力图(heat map)也称热图,是以特殊颜色高亮区域的形式表示密度.温度.气压.频率等分布的不易理解和表达的数据. 二.HeatmapRenderer esri/renderer ...
- (一)SSO之CAS框架通俗原理
版权声明:本文为博主原创文章.转载请标明出处. https://blog.csdn.net/lovesummerforever/article/details/36068249 SSO统一验证 ...
- 【洛谷】【动态规划+单调队列】P1714 切蛋糕
[题目描述:] 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但 ...
- Oracle create tablespace 创建表空间语法详解
CREATE [UNDO] TABLESPACE tablespace_name [DATAFILE datefile_spec1 [,datefile_spec2] ...... ...
- VMware安装VMware tool是 遇到The path "" is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers.
The path "" is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers.问题是找不到内核头文件,需要 ...
- jq插件封装格式
(function($) { // closure $.fn.hilight = function( options ) { //将方法定义在$的fn上 var defaults = { textCo ...
- keepalived 做全端口映射
global_defs { lvs_id BACKUP } vrrp_sync_group VGM { group { VI_1 } } vrrp_inst ...