• 什么是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做了哪些事情呢?

  1. 对事件处理进行了重新封装。。
  2. 封装了Model, View对象。
  3. 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的更多相关文章

  1. 简说MVC Filter

    Filter与FilterProvider之间的关系 根据用途和执行时机的不同,MVC主要分为以下5种类型的过虑器:AuthenticationFilter.AuthorizationFilter.A ...

  2. 简说mvc路由

    首先我们通过在Global.asax中的Application_Start将路由信息注册到RouteTable的Routes静态属性中.如下代码所示: public class RouteTable ...

  3. WPF 杂谈——开篇简言。

    这俩年多来笔者一直在从事关于WPF的开发.虽然不能说是专家级别的.但是对于WPF的应用还是有一定的了解.论他的灵活性决对不在WinForm之下.WPF的出现更是引发一段热议.他的何去何从更是让很多人感 ...

  4. WPF 杂谈——开篇简言

    这俩年多来笔者一直在从事关于WPF的开发.虽然不能说是专家级别的.但是对于WPF的应用还是有一定的了解.论他的灵活性决对不在WinForm之下.WPF的出现更是引发一段热议.他的何去何从更是让很多人感 ...

  5. Java进击C#——应用开发之Asp.net MVC

    本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...

  6. MVC Controller的激活

    各Controller的继承关系 Controller最重要的是对Execute方法的调用,当目标Controller对象被激活后,对请求的后续处理和最终响应均是通过执行这个Execute方法来完成. ...

  7. Java进击C#——前言

    本章简言 记得三年前笔者来到现在的公司的时候,公司人口不出十个人.那个时候笔者刚从日本回来,想在福州.厦门.青岛找一个合适自己发展的机会.最后我的一个福州的朋友打电话希望我能过去帮他,跟他一起创业.这 ...

  8. Struts2 源码分析——Result类实例

    本章简言 上一章笔者讲到关于DefaultActionInvocation类执行action的相关知识.我们清楚的知道在执行action类实例之后会相关处理返回的结果.而这章笔者将对处理结果相关的内容 ...

  9. Struts2 源码分析——前言

    笔者简言 笔者在博园里面注册是在二年前.可是那个时候我不知道要写些什么,也怕写出来被别人骂误人子弟.而现在却动笔了是因为前一段时间内我去参加一些大公司的面试,让笔者内心深处留下很多问号.最近三年来我一 ...

随机推荐

  1. 团队作业——Alpha冲刺 8/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:将编辑界面与其中字体设置的弹窗合并,学习Android控件交互. 明日任务:希望完成编辑界面所有接口交互的功能. 郭剑南 今日任务:使用P ...

  2. ES6中变量解构的用途—遍历Map结构

  3. JS强制刷新页面、清除缓存刷新

    清理网站缓存的几种方法 meta方法 <meta http-equiv="pragma" content="no-cache"> <meta ...

  4. shiro实战系列(十三)之单元测试

    由于我们已经涉及到了 Subject reference,我们知道 Subject 是“当前执行”用户的特定安全视图,且该 Subject 实 例绑定到一个线程来确保我们知道在线程执行期间的任何时间是 ...

  5. springmvc与ajax交互常见问题

    这是我个人再编写博客系统的时候,因个人疏忽犯下的低级错误. 不过犯错是一件好事,有助于总结. 1.关于参数前加@RequestBody 如果是使用ajax交互时,必须要加上这个contentType: ...

  6. Redis 4.x 安装及 发布/订阅实践和数据持久化设置

    1.或者源码安装包 #wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2.解压源码包 #tar -zxf redis-4.0.6.t ...

  7. Ubuntu18.04安装Teamviewer

    首先,打开TeamViewer的下载页面,下载Debian/Ubuntu的Deb安装包. 这里有64位和32位安装包选项.可以在Terminal(终端)中输入uname -a 查看自己系统版本是64位 ...

  8. springbatch入门练习(第二篇)

    对第一遍内容的补充 <?xml version="1.0" encoding="UTF-8"?> <bean:beans xmlns=&quo ...

  9. JAVA框架 Spring 引入多个配置文件

    1.如果配置文件比较长,可以分多个配置文件.有两种方式: 1)在主配置文件加标签<import/> <import resource="jd/com/other/appli ...

  10. nodeSelector + deamonset

    DaemonSet 配置文件的语法和结构与 Deployment 几乎完全一样,只是将 kind 设为 DaemonSet. 选择运行节点:当指定.spec.template.spec.nodeSel ...