`
指挥家
  • 浏览: 3303 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
MVC:

筋骨皮模式(Model模型-View视图-Controller控制器)是软件工程中的一种软件架构模式。它把软件系统分为三个基本部分:
骨架(Model模型),表皮(View视图)和筋(Controller控制器)。

筋(控制器Controller)- 负责转发请求,对请求进行处理。
表皮(视图View) - 界面设计人员进行图形界面设计。
骨架(模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)

层次

骨架(Model模型) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比较:观察者模式(软件设计模式))
外皮(View视图) 视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
筋(Controller控制器) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。
[编辑]优点

在最初的JSP网页中,像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。筋骨皮模式从根本上强制性地将它们分开。尽管构造筋骨皮模式应用程序需要一些额外的工作,但是它带给我们的好处是毋庸置疑的。
首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。在筋骨皮设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。
其次,骨架是自包含的,与筋和皮保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。如果把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,只需改变骨架即可。一旦正确地实现了骨架,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于筋骨皮模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件。
此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以构造应用程序提[color=darkred][/color][size=x-large][/size]供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型机型处理,然后选择适当的的视图将处理结果显示给用户。
[编辑]缺点及适用范围

筋骨皮模式的缺点是由于它没有明确的定义,所以完全理解筋骨皮模式并不是很容易。使用筋骨皮模式需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。开发一个筋骨皮模式架构的工程,将不得不花费相当可观的时间去考虑如何将筋骨皮模式运用到应用程序中,同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。另外由于筋骨皮模式将一个应用程序分成了三个部件,所以这意味着同一个工程将包含比以前更多的文件。
因此筋骨皮模式并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性。但对于开发存在大量用户界面,并且逻辑复杂的大型应用程序,筋骨皮模式将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建筋骨皮模式框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。
[编辑]实现

[编辑]MFC
微软所推出的MFC Document/View架构是早期对于筋骨皮模式的实现,MFC將程式分成CView以及CDocument兩大類別,其中的Document对应筋骨皮模式中的Model,View相当于筋骨皮模式中的View+Controller,再加上CWinApp類別,合成三大項。但是基本上MFC是一個失敗的筋骨皮模式作品。
由於MFC之下的Document/View定義過於模糊,未將Controller(MessageMap)部份取出,因此Controller可以置入View或Document,但不管置入哪一方面,都會與View或Document綁死,沒有彈性。
[编辑]Java
[编辑]Java 平台企业版 (J2EE)
和其他的各种框架不一样,J2EE为模型对象(Model Objects)定义了一个规范。
视图(View)
在J2EE应用程序中,视图(View)可能由Java Server Page(JSP)承担。生成视图的代码则可能是一个servlet的一部分,特别是在客户端服务端交互的时候。
控制器(Controller)
J2EE应用中,控制器可能是一个servlet,现在一般用Struts实现。
模型(Model)
模型则是由一个实体Bean来实现。


Java Swing

Swing是一个标准的MVC结构. ComponentUI代表View, 负责描画组件. 组件尤其Model层, 比如JTextField的Document, JTable的TableModel, JTree的TreeModel等等. 而Control可能不是很明显, 我们或许可以简单的将其Event机制看作一个Swing团队开发给开发者的Controller.
作为Java开发者, 如果想理解MVC的结构, 学习Swing的确是个不错的选择.


.NET
ASP.NET

在ASP.NET中,针对视图(View)和控制器(Controller)的模式没有被很好地定义。而模型(Model)则留给开发者去设计。
外皮(View视图)
ASPX和ASCX文件被用来处理视图的职责。在这个设计中视图实际上是从控制器继承而来。这个和Smalltalk的实施有所不同,在Smalltalk中不同的类都有指针互相指向对方.
筋(Controller控制器)
控制器的职责被分割成两部分。事件(Event)的产生和传输是框架的一部分,更明确的说是Page和Control两个类。而事件的处理则在分离的代码中实现。
骨架(Model模型)
ASP.NET 不严格需要一个模型。开发者可以自行选择创建一个模型类,但是很多人选择放弃这一步,直接把事件处理放在控制器里处理任何计算、数据保存等等。但用模型来包含商业逻辑和数据存取是可实现的。
[编辑]ASP.NET MVC
針對原本ASP.NET對於MVC的架構支援的不足,微软官方提供了ASP.NET MVC框架。于2009年3月19日正式发布,新的2.0版本也在测试中。
在新的ASP.NET MVC框架中,表现层与业务逻辑层的关系进一步剥离,但是由于正处于发布初期,因此尚有许多问题没有很好的解决。
[编辑]Windows Forms
在WinForms中,这个针对视图(View)和控制器(Controller)的模式已经很好的定义好的。而模型(Model)则留给开发者去设计。
外皮(View视图)
由Form或者Control类继承来的一个类处理视图的职责。在WinForm这个例子中视图和控制器被编译在同一个类中,这个和ASP.NET不同。
筋(Controller控制器)
控制器的职责被分割成三部分。事件(Event)的产生和传输是操作系统的一部分。在.Net框架中Form和Control类将不同的事件转发给相应的事件处理器。而事件的处理则在分离的代码中实现。
骨架(Model模型)
就像ASP.NET一样,WinForm不严格需要一个模型。开发者可以自行选择创建一个模型类,但是很多人选择放弃这一步,直接把事件处理放在控制器里处理任何计算、数据保存等等。也就是说用模型来包含商业逻辑和数据存取。
[编辑]Perl
Catalyst和Jifty是透過Perl語言所開發出來的Web Framework,都採用Model-View-Controller架構。Catalyst 本身只是做了 Controller,View 和 Model 讓開發者自由選用 CPAN 上的模組開發,例如 Template 和 Template Declare 都可用來產生視圖。Jifty 將 MVC 完全實做完成,View 的部份在早期版本使用 Mason 實做,較新版本使用 Template Declare。
[编辑]Ruby on Rails
Ruby on Rails是透過Ruby語言所開發出來的Web Framework,也是採用Model-View-Controller架構。Model 部份使用 Active Record 概念實做,加上 Migration 機制,使得其 Model 結構非常容易控制。
[编辑]Python
Python 有許多的 MVC 架構。最常用的有 Django 和 TurboGears。
[编辑]JavaScript
Model-View-Controller (MVC) with JavaScript
[编辑]PHP
The Model View Controller Framework for PHP Web Applications
CodeIgniter
[编辑]ActionScript 3
PureMVC Standard for ActionScript 3
分享到:
评论

相关推荐

    MVC结构剖析图(非常详细适合新手)

    MVC全名是Model View Controller,是模型...而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

    最基本的MVC结构

    总之,MVC模式为Web开发提供了一种结构化的组织方式,使得开发者能够更好地管理和维护代码,同时提高开发效率。结合Java Web技术,如Spring MVC和Struts2,可以构建出高效、可扩展的Web应用程序。而CRUD操作则是这些...

    MVC结构在Ajax客户端开发中的应用研究.pdf

    "MVC结构在Ajax客户端开发中的应用研究" MVC 结构是软件开发中的一种常见的设计模式,它将应用程序分成三个部分:模型(Model)、视图(View)和控制器(Controller)。其中,模型负责存储和管理数据,视图负责显示...

    mvc各种理解介绍

    "MVC架构模式和ASP.NET MVC项目结构" MVC架构模式是将Web应用程序组件分离的架构结构设计模式,通过分开组件,我们可以更好地控制应用程序的单个部件,从而能够更加轻松地开发、修改和测试这些部件。MVC架构模式...

    最基础的MVC结构

    **MVC(Model-View-Controller)...学习“最基础的MVC结构”意味着你需要掌握以上概念,并通过实践编写控制器、视图和模型来加深理解。在C#的学习过程中,理解并运用MVC模式将有助于你构建高效、易于维护的Web应用。

    J2ME客户端的MVC结构设计介绍

    在选择MVC结构的实现方式时,需要权衡代码复杂性、可维护性、可扩展性等因素,根据项目需求和团队能力来确定最适合的实现策略。在J2ME这样的资源受限环境中,优化设计尤为重要,以确保应用程序的性能和用户体验。

    使用PureMVC实现ASP.NET的MVC结构开发

    本文以初学者的视角,详细地介绍PureMVC在ASP.NET的应用。 PureMVC不仅仅是Flex的MVC框架哦,而且它非常的小巧,还等什么呢,快来试用一下吧。 PureMVC的设计思想真的是很棒的,如果再加上C#3.0的LINQ,那就更加的...

    PureMVC结构pdf中文版

    《PureMVC结构pdf中文版》是对PureMVC框架的深度解析,主要针对Flex和ActionScript3开发者。这个文档提供了一套完整的理解、应用及优化PureMVC模式的方法。PureMVC是一个轻量级的、多层的架构框架,旨在简化开发过程...

    基于MVC结构的合同管理

    【基于MVC结构的合同管理】是一个典型的软件开发项目,主要使用C#编程语言实现。在本文中,我们将深入探讨MVC(Model-View-Controller)设计模式在合同管理系统的应用,以及它如何与C#相结合,提升软件的可维护性和...

    简述java技术的web体系结构-mvc

    Java Web体系结构是一种用于构建动态、交互式Web应用程序的技术框架,其中最具代表性的是Model-View-Controller(MVC)设计模式。MVC模式是软件工程中的一种架构模式,广泛应用于Web开发,它将应用程序的不同部分...

    MVC购物车用MVC结构+ORACLE 做得 比较简单 初学者可以看看

    标题"MVC购物车用MVC结构+ORACLE做得比较简单 初学者可以看看"表明这是一个关于使用Model-View-Controller(MVC)架构和Oracle数据库开发的简单购物车应用的教程,适合初级学习者。描述中的"用MVC结构+ORACLE做得...

    一个标准的MVC结构的SSI,实现了用户注册,查询,删除,修改操作

    在这个项目中,"一个标准的MVC结构的SSI"指的是使用Struts2、Spring和iBatis(简称SSI)框架组合实现了一个完整的MVC应用。下面将详细阐述这三个框架及其在MVC中的作用。 1. **Struts2**:Struts2是一个基于MVC设计...

    MVC结构通讯录-学习MVC的好助手

    结合MVC设计: M模块(好友user) V视图 C控制(添加 查看 修改) SQL 一个库test,表contacts 程序结构 分模块M,通过控制C,调用V 模块基于base.class.php扩展 lib库包括db.class.php V使用smarty处理 决定使用...

    DotNet MVC 简单介绍

    ** DotNet MVC 简介** DotNet MVC(Model-View-Controller)是Microsoft为.NET Framework提供的一种Web应用程序开发框架,它旨在实现可维护性、可扩展性和测试友好性。MVC模式是一种软件设计模式,它将应用程序的...

    Mvc结构下js、css的引入

    下面我们将详细介绍如何在MVC项目中正确地引入JS和CSS文件。 #### 引入CSS样式表 在HTML文档头部,通常使用`<link>`标签来引入CSS文件。例如,在给定的文件示例中,CSS文件通过以下方式被引用: ```html ("~/...

    MVC的基本介绍

    ### MVC的基本介绍 #### 一、MVC的概念与定义 MVC,即Model-View-Controller(模型-视图-控制器)模式,是一种广泛应用于软件工程中的架构模式,特别是Web开发领域。MVC的设计思想旨在将应用程序的不同部分进行...

    用Struts实现MVC结构

    这格里面介绍了struts 的MVC结构,里面的内容非常详细

    C# MVC 经典框架

    C# MVC(Model-View-Controller)经典框架是基于微软.NET平台的一种强大的Web应用程序开发模式。这个框架结合了MVC设计模式的灵活性和C#语言的强类型特性,为开发者提供了构建可维护、高性能和高度分层的Web应用的...

    mvc练手项目 三层结构 学生管理系统 jsp servlet

    这是一个基于MVC(Model-View-Controller)设计模式的练手项目,用于构建一个学生管理系统。系统采用经典的三层架构,包括表现层(View)、业务逻辑层(Controller/Service)和数据访问层(Model)。主要技术栈涉及...

Global site tag (gtag.js) - Google Analytics