`
student_lp
  • 浏览: 429273 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

认识系统架构模式MVC

阅读更多

一、什么是MVC模式

     所谓的MVC模式,即模型-视图-控制器(Module-View-Controller)模式。它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

MVC示意图如下:


视图:视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web Services.

     如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型:在MVC中,模型便是执行某些任务的代码,而这部分代码并没有任何逻辑决定他对用户端的表示方法。模型端只有纯粹的功能性接口,也就是一系列的公开方法。通过这些公开方法,变可以取得模型端的所有功能。

     模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。

     现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

二、为什么要使用 MVC

     大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。

     首先,最重要的一点是多个视图能共享一个模型,正如我所提及的,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论你的用户想要Flash界面或是 WAP 界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用你的代码了。

     由于模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。例如,很多数据可能用HTML来表示,但是它们也有可能要用Macromedia Flash和WAP来表示。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。

     因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到Oracle,或者改变你的基于RDBMS数据源到LDAP,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。

     对我来说,控制器的也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。

三、MVC的缺点

      MVC的缺点是由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。

     你将不得不花费相当可观的时间去考虑如何将MVC运用到你的应用程序,同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫无顾忌的重用它们了。

     根据我个人经验,由于我们将一个应用程序分成了三个部件,所以使用MVC同时也意味着你将要管理比以前更多的文件,这一点是显而易见的。这样好像我们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提。

     MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。

四、MVC优点

     MVC设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。

 

参照:http://www.nowamagic.net/librarys/veda/detail/631  和 《java与模式》

  • 大小: 63.4 KB
分享到:
评论

相关推荐

    MVC设计模式框图解

    让你对MVC设计模式有一个更加深刻的认识,深入浅出的搞明白MVC

    使用php开发自己的MVC模式构架

    使用php开发自己的MVC模式构架.pdf ),新手可以看看,认识下什么是mvc框架,对框架有个底层的认识,也能试着自己开发一个

    简单易懂的三层架构(MVC)

     关于“多层结构”开发模式,存在这样一种争议:一部分学者认为“多层结构”与“面向对象的程序设计思想”有着非常紧密的联系。而另外一部分学者却认为二者之间并无直接联系。写作这篇文章并不是要终结这种争议,其...

    mvc讲义pdf

    mvc架构,领导学生学习模式,让很多缺乏开发经验的人们认识

    基于SSH的进销存系统.zip

    一般这个时候就要扯到三层架构和MVC模式了,不管很多人都这两个其实会搞混,说不出个所以然来,这里我强烈建议你去看看对三层和MVC的认识过程。 这个ERP项目就是用到了三层架构和MVC模式了,在之前介绍的JYUOA项目...

    Discuz!NT前台模型架构(MVC)

    因为从这篇文章开始,本人将跟大家聊一聊关于这个产品架构上面的东西,以备大家对这个产品有一个总体上的认识,从而为后面的文章做一下铺垫。费话少说,开始正文吧:)首先请大家看一下官方提供的“前台页面层次图”...

    考试测评系统

    该系统采用MVC设计模式架构, 使用Swing技术实现了考生登陆,进入考试,考试成绩,考试规则,考试退出 进入考试时时实现上一题下一题功能,考试完毕提交试卷,可在考试成绩中查生考生分数。 责任描述: 该项目的...

    vue高级面试题2023

    提到MVVM,很多前端开发者都会想到Vue的双向绑定,然而它们并不能划等号,MVVM是一种软件架构模式,而Vue只是一种在前端层面上的实现,其实不单在Vue里,在很多Web 框架应用里都有相关的实现。MVVM模式到底是什么呢...

    经典struts+hibernate结合的电影售票系统项目

    电影售票系统采用struts+hibernate再结合java的dao模式框架做的,具有典型的mvc结构,在后台操作电影影片中:在添加电影这步,我用了上传案例结合hibernate的添加数据功能成功的将电影封面上传到了指定位置,一部...

    MVPDemo:MVP模式使用

    从认识mvp模式,学习,开始使用mvp模式到现在也有一年多的时间了。这一年时间里,无论是自己要做一些Android的小玩意还是做项目,最先考虑的就是要不要用mvp模式开发。学了这么久的MVP模式,这次趁现在还有点空余时间...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际...

    基于关联挖掘的构件检索方法研究及原型系统实现

    本系统采用了B/S体系结构,MVC框架以及基于Struts和Hibernate等的J2EE技术来实现,系统的实现可以帮助用户更高效地检索和复用构件。 目录结构 摘 要 1 ABSTRACT 3 第一章 绪论 1 1.1研究背景和意义 1 1.2国内外研究...

    asp.net知识库

    通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储...

    基于J2EE框架的个人博客系统项目毕业设计论...

    在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际...

    利用Angularjs和Bootstrap前端开发案例实战

    我们将利用Angularjs 和 Bootstrap,开发一个前端应用实例,通过这一次简单的项目实战,引领大家进入AngularJS前端开发的殿堂,并向大家介绍一下几个知识点: ...MVC是一种UI架构模式,它的目的是将应

    《iOS6开发指南》精彩书摘

    iOS开发中常用的4种模式,分别为单例模式、委托模式、观察者模式、MVC模式。按照问题提出、实现原理、应用案例的结构介绍了每种模式的适用情况、实现的原理并同时用具体案例来说明每个案例的实现方式。 第4章...

    matlab计算器log的代码-aewsome-technology-life-growth:技术|生活|成长

    记录自己在学习、工作、生活等方面的一些方法与认识,包括但不限于笔试面试知识点、优质博客、资料、技术文章、学习方法、工具利器等等。 目录 基础类 集合类 原子类 同步类 并发集合 多线程 剑指 Offer LeetCode ...

Global site tag (gtag.js) - Google Analytics