相关文章推荐
大方的柑橘  ·  Qt 是一个使用 C++ ...·  2 周前    · 
聪明的领结  ·  启动ActiveMQ ...·  2 年前    · 
MVC开始是存在于桌面程序中的,M是指业务 模型 ,V是指 用户界面 ,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批 统计数据 可以分别用 柱状图 饼图 来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 [1-2]
模型-视图-控制器( MVC )是 Xerox PARC 在二十世纪八十年代为 编程语言 Smalltalk-80发明的一种 软件设计模式 ,已被广泛使用。后来被推荐为 Oracle 旗下Sun公司 Java EE 平台的设计模式,并且受到越来越多的使用 ColdFusion PHP 的开发者的欢迎。模型-视图-控制器模式是一个有用的 工具箱 ,它有很多好处,但也有一些缺点。
(概述内容来源:
M即model模型是指 模型表示 业务规则 。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与 数据格式 无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的 重复性
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。
C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
MVC指MVC模式的某种框架,它强制性地使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean 的模式。

MVC框架 视图

视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由 HTML 元素组成的界面,在新式的Web应用程序中, HTML 依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括 Adobe Flash 和像 XHTML ,XML/XSL, WML 等一些标识语言和Web services.
MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

MVC框架 模型

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

MVC框架 控制器

控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的 超链接 和发送 HTML表单 时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
框架和设计模式的区别
框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在 软件生产 中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或 工具集 ,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的 基础结构 ,以获得最高级别的重用性。
框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定 应用领域 ,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
框架模式有哪些?
MVC、 MTV MVP 、CBD、ORM等等;
框架有哪些?
C++ 语言的QT、 MFC gtk ,Java语言的SSH 、 SSI php语言 的 smarty(MVC模式), python 语言的 django (MTV模式)等等
设计模式有哪些?
简而言之:框架是大智慧,用来对 软件设计 进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低 耦合度

MVC框架 Struts

Struts Apache 软件基金下 Jakarta 项目的一部分。 Struts框架 的主要架构设计和开发者是Craig R.McClanahan。Struts 是 Java Web MVC框架中不争的王者。经过长达九年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的 市场份额 。但是Struts某些技术特性上已经落后于新兴的MVC框架。面对 Spring MVC 、Webwork2这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。但站在 产品开发 的角度而言,Struts仍然是最稳妥的选择。
Struts有一组相互协作的类(组件)、 Servlet 以及jsp tag lib组成。基于 struts 构架的 web应用程序 基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,很容易理解为什么说Struts是一个web framework,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括 EJB JDBC 和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates, XSL 等等这些 表示层 组件相结合。

MVC框架 Spring

Spring 实际上是Expert One-on-One J2EE Design and Development 一书中所阐述的设计思想的具体实现。在One-on-One 一书中, Rod Johnson 倡导 J2EE 实用主义的 设计思想 ,并随书提供了一个初步的开发框架实现( interface 21 开发包)。而Spring 正是这一思想的更全面和具体的体现。Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。
Spring是一个 开源框架 ,由Rod Johnson创建并且在他的著作《 J2EE设计开发编程指南 》里进行了描述。它是为了解决企业应用开发的复杂性而创建的。Spring使使用基本的 Java Beans来完成以前只可能由EJB完成的事情变得可能了。然而,Spring的用途不仅限于 服务器端 的开发。从简单性、 可测试性 松耦合 的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring是一个轻量的 控制反转 和面向 切面 的容器框架。当然,这个描述有点过于简单。但它的确概括出了Spring是做什么的。

MVC框架 ZF

Zend Framework (简写ZF)是由 Zend 公司支持开发的完全基于 PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,ZF采用 MVC(Model–View-Controller) 架构模式 来分离应用程序中不同的部分方便程序的开发和维护。
(MVC框架的详细使用及其相关具体操作可以阅读参考资料: 或者 扩展阅读 第二,三,四条。)

MVC框架 .NET

.NET MVC是微软官方提供的以MVC模式为基础的.NET Web应用程序(Web Application)框架,它由Castle的 MonoRail 而来(Castle的MonoRail是由java而来),目前最新版本是.N 4.5。

MVC框架 优点

视图层和 业务层 分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的 业务流程 或者 业务规则 的改变只需要改动MVC的模型层即可。因为模型与控制器和视图 相分离 ,所以很容易改变 应用程序 数据层 和业务规则。
2.重用性高
MVC模式允许使用各种不同样式的视图来访问同一个 服务器端 的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。
3.部署快, 生命周期 成本低
MVC使开发和维护 用户接口 技术含量 降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员( Java 开发人员)集中精力于 业务逻辑 ,界面程序员( HTML JSP 开发人员)集中精力于表现形式上。
分离视图层和 业务逻辑层 也使得WEB应用更易于维护和修改。

MVC框架 缺点

1.完全理解MVC比较复杂。
由于MVC模式提出的时间不长,加上同学们的实践经验不足,所以完全理解并掌握MVC不是一个很容易的过程。
2.调试困难。
因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。
3.不适合小型,中等规模的应用程序
在一个中小型的应用程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐。
4.增加 系统结构 和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低 运行效率
5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的 显示数据 。对未变化数据的不必要的频繁访问,也将损害操作性能。
根据 天极网 资料显示:基于Web的MVC framework在J2EE的世界内已是空前繁荣,TTS网站上几乎每隔一两个星期就会有新的MVC框架发布,比较好的MVC,老牌的有Struts、Webwork。新兴的MVC 框架有Spring MVC、Tapestry、JSF等。这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、 VRaptor 等,这些框架都提供了较好的层次分隔能力,在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助 类库 ,同时也促进了 生产效率 的提高。
如何选择一个好的框架应用在项目中,将会对项目的效率和可重用是至关重要的。
在ASP .NET MVC框架中没有了自己的控件,页面显示完全就回到了写 html 代码的年代。还好在 asp .net mvc框架中也有自带的HtmlHelper和UrlHelper两个帮助类。另外在MvcContrib扩展项目中也有扩展一些帮助类,这样我们就不光只能使用完整的html来编写了需要显示的页面了,就可以使用这些帮助类来完成,但最后 运行时 都还是要生成 html代码 的。
HtmlHelper类
HtmlHelper类位于System.Web.MVC.Html 命名空间 下。主要包括FormExtensions,InputExtensions,
LinkExtensions,SelectExtensions,TextAreaExtensions,ValidationExtensions,RenderPartialExtensions等7个 静态类 ,他们全部是是采用拓展方法来实现的。
InputExtensions类:主要有5种类型的扩展方法,分别用于CheckBox控件、Hidden控件、Pass控件、Radion Button控件 TextBox控件
LinkExtensions类:该类主要用于生成 相关链接 ,主要扩展了ActionLink和RouteLink方法。
ActionLink:扩展方法主要实现一个连接,共有十个重载方法。
UrlHelper帮助类
看类名也都知道这个类是用来成URL在 ASP .NET MVC 应用程序 中。
UrlHelper提供了四个非常常用的四个方法。
1.Action方法通过提供Controller,Action和各种参数生成一个URL,
2.Content方法是将一个虚拟的,相对的路径转换到应用程序的 绝对路径
3.Encode方法是对URL地址进行加密,与Server.Encode方法一样。
4.RouteUrl方法是提供在当前应用程序中规定的路由规则中匹配出URL。
另外还有两个属性,分别是RequestContext和RouteCollection两个属性,分别指的是包含HTTP 上下文 和RouteData两个属性,另外,RouteCollection是整个当前应用程序中规定的路由规则。
自定义 控件
微软 提供的HtmlHelper已经是足够大部分开发人员使用了,但是有一些功能要用微软提供的HtmlHelper可能还不满足要求。接下来就谈谈如何自定义的过程。
首先自定义的方法就是对HtmlHelper对象的扩展。
扩展方法实现的三要素:1、静态类 2、 静态方法 3、 this关键字
1、先定义一个类,例如:MyHtmlHelper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcApplicationFirstDome.Models {
//静态类
public static class MyHtmlHelper
{
//静态方法
}
}
2、假设要扩展的方式是GetSpan,作用就是当你传入参数时,内部封装了之后返回结果,代码如下。注意在MyHtmlHelper类中要引用using System.Web.Mvc命名空间。
//静态方法
public static string GetSpan(this HtmlHelper htmlHelper,string text)
{
return ""+text+"";
}
经过上面两步之后HtmlHelper的扩展方法GetSpan基本可以使用了,接下来就讲解如何在页面调用了。
在调用的时候要注意下一命名空间:如果扩展方法的命名空间和页面的命名空间不同的就必须引用扩展方法的 命名空间 ,否则在页面是没有办法调用自定义的方法的。
引用完命名空间之后,就可以在相应的页面调用自定义的扩展方法了。
对于某些项目来说, 自定义控件 过于复杂和浪费时间。这个时候也可以从技术社区或是源代码站下载适合自己需求的Mvc控件。如一些控件套包, 表格控件 等。