• 什么是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. tplink-ssh登录

    同步发表:https://www.eatm.app/archives/395.html 备份配置信息 开启SSH #修改文件userconfig/etc/config/dropbear, #查看opt ...

  2. 项目管理心经——正确的使用Microsoft Project

    第一步:填写task items 第二步:定义个性化日历(Tools-->Change working time) 第二步:填写task duration 第三步:填写前置任务 第四步:自动生成 ...

  3. FZU Monthly-201903 tutorial

    FZU Monthly-201903 tutorial 题目(难度递增) easy easy-medium medium medium-hard hard 思维难度 ABF G CH D E A. D ...

  4. 阿里八八Alpha阶段Scrum(1/12)

    任务分配 叶文滔:整体框架UI设计.作为组长进行任务协调 俞鋆:后端服务器及数据库搭建 王国超:日程模块多日显示部分设计 黄梅玲:日程模块单日显示部分设计 林炜鸿:日程模块文本添加部分设计 张岳.刘晓 ...

  5. [Eclipse]在重命令文件名时,提示编码格式有问题导致修改失败,需要设置如下几个默认编码为UTF-8

    需要设置的几处地方为: 1.Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 2. W ...

  6. oracle数据库flashback系列--闪回数据库在dataguard中的使用

    很多人在学习flashback database这个oracle技术的时候,都会有一个疑问,就是如果我只有一个数据库作为生产库的话,是否有这样的业务需求导致我们要把数据库闪回到以前的时间点?以及这样做 ...

  7. mysql刚启动就停止是什么原因

    1.找到mysql安装目录,将其配置文件my.default.ini改名为my.ini,并且将my.ini移至bin目录下. 2.启动命令行,将目录切换到mysql安装目录的bin目录下.3.接下来, ...

  8. scrapy模拟登陆的几种方法

    方法一: 方法二: 方法三:

  9. Java中splite的用法与小技巧

    在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧.如执行:"2|33|4".split(&quo ...

  10. awk、sed处理文件的简单例子

    awk.sed对处理日志文件和写shell脚本时非常有益.这个东西,如果不经常操作,真心过一段时间就忘差不多..要掌握熟练,就要多练习,这没什么可说的. awk '条件{命令}' filename 假 ...