• 什么是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. maven的下载与安装

    下载路径:http://maven.apache.org/download.cgi 选择打红线的进行下载,我用的版本是3.3.9, 下载后解压该文件,解压后的文件内容如下: 解压完成后配置maven的 ...

  2. linux禁止非法用户试探登录

    当我们的linux主机一旦暴露在互联网上,就会遭受到来自网络上的一些非法用户的骚扰.如弱口令扫描,试探性登录:这些行为对linux主机构成一定的威胁.那怎样防范此类的攻击了,这里写了一个脚本,功能就是 ...

  3. 四、 git关联远程仓库及推送

    接之前笔记,在 github上建立与本地同名的仓库 demo 关联远程仓库 1. https 模式     远程库的名字就是origin,这是Git默认的叫法 git remote add origi ...

  4. oneinstack远程管理数据库

    本篇文章主要内容是本地工具连接数据非网页(网站)连接 如果你想使用网页(网站)连接远程数据库,请看下面的官网教程 OneinStack如何配置MySQL远程连接? 为了安全考虑,OneinStack仅 ...

  5. MYSQL一次千万级连表查询优化(一)

    摘自网上学习之用 https://blog.csdn.net/Tim_phper/article/details/78344444 概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的 ...

  6. kubernetes lable 操作

    我们要给已创建的Pod“redis-master”添加一个标签role=master: $ kubectl label pod redis-master role=master 查看该Pod的Labe ...

  7. Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-2-Compose 命令说明

    Compose 命令说明 1)命令对象与格式 对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中 的服务或者容器.如果没有特别的说明,命令对象将是项目,这意味着项目中所有 ...

  8. leetcode 217—Contains Duplicate

    Given an array of integers, find if the array contains any duplicates. Your function should return t ...

  9. Scrapy 框架(二)数据的持久化

    scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...

  10. loadrunner中pacing的设置

    通常我们在谈到一个软件的“性能”的时候,首先想到的就是“响应时间”和“并发用户数”这两个概念.我们看到的性能需求经常都是这样定义的: “要求系统支持 100 个并发用户” 看到这样的性能需求,我们往往 ...