论文部分内容阅读
摘要如何更好利用设计模式来设计软件,MVC框架提供一个好的选择,在这个模型下会强行把业务逻辑层和表现逻辑层分离,为软件后期设计及维护提供支持,是软件开发中必须要掌握的模型。尤其是大型软件,能起到事半功倍的效果。
关键词asp.net MVC Model View Controller Action
中图分类号:TP31文献标识码:A
1 引言
MVC框架在JAVA语言中已经出现了许多年,但在2008年微软才推出了ASP.NET的MVC框架1.0,现在MVC2.0也已经到了RC版本,预计年内将推出正式版。那么MVC框架和我们平常ASP.NET编写的WEB程序有什么不同又有什么优势呢?
2 传统的ASP.NET WEB
ASP.NET是ASP编程语言的一个全新升级,它不是一个过程式的语言,而是一个纯粹的面向对象的语言,在引入的.NET框架中提供了一个虚拟机,所有的代码、语句等先编译后都加载到虚拟机上,再由虚拟机编译执行。由于需要快速开发,它的开发方式和桌面级开发极为类似。它提供了大量的WEB控件,使得开发变得简单快速,可能只是简单的拖放和设置就能完成一个在ASP环境下很复杂的代码。ASP.NET的出现成为RAD(快速应用开发)的首选工具,也为其推广创造了条件。
3 ASP.NET的缺点
但是简单的背后,其实VS.NET集成开发环境已经替你完成了很多工作。但同时也产生了大量的冗余代码,当你在查看WEB页面的HTML代码时会发现,生成的HTML很长也很复杂,有大量隐藏域字段,用的WEB控件越多,隐藏域就会越长,由于采用了加密,会发现有大量不可知代码。使得HTML语言的设计者无所施从,尤其是美工人员,因为不可能要求美工也要理解编码,从而间接地对网站编写造成障碍。
4 为什么要用MVC模型
MVC模型是由三大层构成,分别是模型-视图-控制器(MVC:Model-View-Controller),如图。它是把一层就可以做的到的东西进行了分离,看上去把简单的东西复杂化了,但是一旦发生了改动或客户需求发生变化,哪怕是表现层需要换界面,因为分了层,大部分的代码是不需要变化,只需要改动变化的那一层即可,后期的维护成本会大为提高。因此,将需要变化的分离开。业务逻辑会变,所以Controller要分离,表现会变,所以View要分离,Model会变,所以Model要分离。
MVC的优势在于:它把耦合性的页面作了拆分,层与层绞合降低,如果是哪一层发生改变只需改动相应层即可。MVC的优势:强制分离的MVC使得管理应用程序变得更加容易控制,可理解,可重构性增强。并抛弃ViewState这个的概念,使得开发者几乎能够完全控制页面的行为。能够更好的使用测试驱动开发。因为有了这个框架,开发人员不得不按照其框架进行开发,也就是说你想回头,不分离业务逻辑层和表现逻辑层都不可能。
对MVC框架来说其中:模型部件是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,他独立于具体的界面表达和I/O操作。视图部件把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图具有一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。
5 ASP.NET下的MVC框架特征
(1)能实现应用程序基本任务(输入逻辑,业务逻辑和UI逻辑)的分离,支持测试及测试驱动开发。可以使用与.NET框架相兼容的任何单元测试框架测试。
(2)实现了强有力的URL映射组件,支持在应用程序中构建易于理解的可搜索的URL。URL中可不必包括扩展名,且设计还支持URL重命名模式。
(3)支持在现有ASP.NET页面(.aspx文件)、用户控件(.ascx文件)以及母版页面(.master文件)标记文件中把标记用作视图模板。
(4)支持现有ASP.NET特征。ASP.NET MVC框架支持使用例如表单和Windows认证,URL授权,会员和角色,输出缓冲和数据缓冲,会话和配置状态管理,等及其它ASP.NET特征。
(5)ASP.NET MVC框架以不同于ASP.NET网站应用程序的方式把URL映射到服务器代码。MVC框架不是把URL映射到ASP.NET页面或HTTP处理器程序,而是直接把URL映射到特定的控制器类。而后,由控制器类负责处理发来的请求。
(6)在ASP.NET MVC框架中,模型、视图和控制器组件被强行分离开来。控制器组件将定位控制器中适当的行为方法,取得用作行为方法的参数值,处理执行行为期间所有可能发生的错误,并生成要求的视图。必须为每一组组件进行编程,进而达到分层目的。
(7)通过提供了一个URL映射引擎,ASP.NET MVC框架在把映射URL到控制器类方面提供了相当的灵活性。使用这种映射引擎来定义路由规则,然后ASP.NET MVC框架使用这些路由规则来计算发来的URL请求并选择要执行的控制器。
6 实例分析
在VS2008中新建一个MVC项目后,会有一个DEMO,我们就来看一下这个DEMO是如何分层来实现MVC的。
(1)default页:default页为空,没有写任何代码,ASP.NET使用了URL重写 ASP.NET中叫做UrlRouting进而进行重定向的。在Global.asax.cs文件中定有页面重写规则:
new { controller = "Home", action = "Index", id = "" }动作行为控制器Home
(2)Controller(控制器):如上,我们在Controllers文件夹下我们可以找到HomeController.cs, 这里使用了一个简单约定, 就是如果URL中获取到的Controller名字是Home, 则他的Controller类名就是HomeController.。只需在其URL中的名字后加上“Controller”
(3)Action(动作):控制器对行为进行指派。在HomeControllers.cs代码段:
public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); }
一个Controller可以包含多个Action, MVC模式中Controller角色的具体实现逻辑都是在Action中的。因为我们的Action是Index, 所以自然就要调用Index()方法.这里将"Webcome to ASP.NET MVC!", 这里的Model角色就是这句话, 也就是一个字符串对象。Controller的一个重要作用就是将Model对象传递给View,也就是具体的页面. 传递的方法就是将这个字符串放到ViewData这个集合对象中, 然后在页面上也调用这个对象获取数据。
(4)View(视图):跳转到View显示数据。
public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View("index"); }
(5)浏览器响应:在View中没有任何代码,只需一句:
<%= Html.Encode(ViewData["Message"]) %>
如上,一个简单的软件代码编写被强行分离,在传统ASP.NET代码中只需要一个页面即可实现这个功能,很明显MVC框架比传统ASP.NET编写的代码要复杂的多,但是MVC框架下的代码分层明确,如果是界面需要改动,那么只需改动View。逻辑需要改动只需改动Controller,业务需要改动只需改动Model,因这个Demo太过简单,Model体现的不是很明显。对于大型软件设计来说,很明显降低了其耦合性,可维护性明显增强。
7 小结
采用MVC设计模式可以在满足对界面要求的同时,使软件的计算模型独立于界面的构成。本文首先介绍了MVC的三个组成构件(模型构件、视图构件和控制构件),以及实现基于MVC的应用需要完成的工作,对分层及为什么要分层及分层后的效果作了介绍,并对ASP.NET MVC框架的一个DEMO作了说明。
参考文献
[1]龚赤兵.Web开发新体验:ASP.NET 3.5 MVC架构与实战.电子工业出版社.
[2]李万宝等.ASP.NET企业级开发案例精解.中国林业出版社.
[3]吕高旭.ASP.NET商业级数据库网站开发实战.电子工业出版社.
关键词asp.net MVC Model View Controller Action
中图分类号:TP31文献标识码:A
1 引言
MVC框架在JAVA语言中已经出现了许多年,但在2008年微软才推出了ASP.NET的MVC框架1.0,现在MVC2.0也已经到了RC版本,预计年内将推出正式版。那么MVC框架和我们平常ASP.NET编写的WEB程序有什么不同又有什么优势呢?
2 传统的ASP.NET WEB
ASP.NET是ASP编程语言的一个全新升级,它不是一个过程式的语言,而是一个纯粹的面向对象的语言,在引入的.NET框架中提供了一个虚拟机,所有的代码、语句等先编译后都加载到虚拟机上,再由虚拟机编译执行。由于需要快速开发,它的开发方式和桌面级开发极为类似。它提供了大量的WEB控件,使得开发变得简单快速,可能只是简单的拖放和设置就能完成一个在ASP环境下很复杂的代码。ASP.NET的出现成为RAD(快速应用开发)的首选工具,也为其推广创造了条件。
3 ASP.NET的缺点
但是简单的背后,其实VS.NET集成开发环境已经替你完成了很多工作。但同时也产生了大量的冗余代码,当你在查看WEB页面的HTML代码时会发现,生成的HTML很长也很复杂,有大量隐藏域字段,用的WEB控件越多,隐藏域就会越长,由于采用了加密,会发现有大量不可知代码。使得HTML语言的设计者无所施从,尤其是美工人员,因为不可能要求美工也要理解编码,从而间接地对网站编写造成障碍。
4 为什么要用MVC模型
MVC模型是由三大层构成,分别是模型-视图-控制器(MVC:Model-View-Controller),如图。它是把一层就可以做的到的东西进行了分离,看上去把简单的东西复杂化了,但是一旦发生了改动或客户需求发生变化,哪怕是表现层需要换界面,因为分了层,大部分的代码是不需要变化,只需要改动变化的那一层即可,后期的维护成本会大为提高。因此,将需要变化的分离开。业务逻辑会变,所以Controller要分离,表现会变,所以View要分离,Model会变,所以Model要分离。
MVC的优势在于:它把耦合性的页面作了拆分,层与层绞合降低,如果是哪一层发生改变只需改动相应层即可。MVC的优势:强制分离的MVC使得管理应用程序变得更加容易控制,可理解,可重构性增强。并抛弃ViewState这个的概念,使得开发者几乎能够完全控制页面的行为。能够更好的使用测试驱动开发。因为有了这个框架,开发人员不得不按照其框架进行开发,也就是说你想回头,不分离业务逻辑层和表现逻辑层都不可能。
对MVC框架来说其中:模型部件是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,他独立于具体的界面表达和I/O操作。视图部件把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图具有一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。
5 ASP.NET下的MVC框架特征
(1)能实现应用程序基本任务(输入逻辑,业务逻辑和UI逻辑)的分离,支持测试及测试驱动开发。可以使用与.NET框架相兼容的任何单元测试框架测试。
(2)实现了强有力的URL映射组件,支持在应用程序中构建易于理解的可搜索的URL。URL中可不必包括扩展名,且设计还支持URL重命名模式。
(3)支持在现有ASP.NET页面(.aspx文件)、用户控件(.ascx文件)以及母版页面(.master文件)标记文件中把标记用作视图模板。
(4)支持现有ASP.NET特征。ASP.NET MVC框架支持使用例如表单和Windows认证,URL授权,会员和角色,输出缓冲和数据缓冲,会话和配置状态管理,等及其它ASP.NET特征。
(5)ASP.NET MVC框架以不同于ASP.NET网站应用程序的方式把URL映射到服务器代码。MVC框架不是把URL映射到ASP.NET页面或HTTP处理器程序,而是直接把URL映射到特定的控制器类。而后,由控制器类负责处理发来的请求。
(6)在ASP.NET MVC框架中,模型、视图和控制器组件被强行分离开来。控制器组件将定位控制器中适当的行为方法,取得用作行为方法的参数值,处理执行行为期间所有可能发生的错误,并生成要求的视图。必须为每一组组件进行编程,进而达到分层目的。
(7)通过提供了一个URL映射引擎,ASP.NET MVC框架在把映射URL到控制器类方面提供了相当的灵活性。使用这种映射引擎来定义路由规则,然后ASP.NET MVC框架使用这些路由规则来计算发来的URL请求并选择要执行的控制器。
6 实例分析
在VS2008中新建一个MVC项目后,会有一个DEMO,我们就来看一下这个DEMO是如何分层来实现MVC的。
(1)default页:default页为空,没有写任何代码,ASP.NET使用了URL重写 ASP.NET中叫做UrlRouting进而进行重定向的。在Global.asax.cs文件中定有页面重写规则:
new { controller = "Home", action = "Index", id = "" }动作行为控制器Home
(2)Controller(控制器):如上,我们在Controllers文件夹下我们可以找到HomeController.cs, 这里使用了一个简单约定, 就是如果URL中获取到的Controller名字是Home, 则他的Controller类名就是HomeController.。只需在其URL中的名字后加上“Controller”
(3)Action(动作):控制器对行为进行指派。在HomeControllers.cs代码段:
public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); }
一个Controller可以包含多个Action, MVC模式中Controller角色的具体实现逻辑都是在Action中的。因为我们的Action是Index, 所以自然就要调用Index()方法.这里将"Webcome to ASP.NET MVC!", 这里的Model角色就是这句话, 也就是一个字符串对象。Controller的一个重要作用就是将Model对象传递给View,也就是具体的页面. 传递的方法就是将这个字符串放到ViewData这个集合对象中, 然后在页面上也调用这个对象获取数据。
(4)View(视图):跳转到View显示数据。
public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View("index"); }
(5)浏览器响应:在View中没有任何代码,只需一句:
<%= Html.Encode(ViewData["Message"]) %>
如上,一个简单的软件代码编写被强行分离,在传统ASP.NET代码中只需要一个页面即可实现这个功能,很明显MVC框架比传统ASP.NET编写的代码要复杂的多,但是MVC框架下的代码分层明确,如果是界面需要改动,那么只需改动View。逻辑需要改动只需改动Controller,业务需要改动只需改动Model,因这个Demo太过简单,Model体现的不是很明显。对于大型软件设计来说,很明显降低了其耦合性,可维护性明显增强。
7 小结
采用MVC设计模式可以在满足对界面要求的同时,使软件的计算模型独立于界面的构成。本文首先介绍了MVC的三个组成构件(模型构件、视图构件和控制构件),以及实现基于MVC的应用需要完成的工作,对分层及为什么要分层及分层后的效果作了介绍,并对ASP.NET MVC框架的一个DEMO作了说明。
参考文献
[1]龚赤兵.Web开发新体验:ASP.NET 3.5 MVC架构与实战.电子工业出版社.
[2]李万宝等.ASP.NET企业级开发案例精解.中国林业出版社.
[3]吕高旭.ASP.NET商业级数据库网站开发实战.电子工业出版社.