目标:学习ASP.NET MVC 和ASP.NET WebForm的不同之处。学习在合适的地方使用ASP.NET MVC。
MVC(Model-View-Controller)结构模式把一个对象分离成3大块:Model(数据模型层),View(视图层),Controller(控制层),ASP.NET MVC 框架提供了一种有别于ASP.NET WebForm的模式,提供了基于mvc的网页对象。ASP.NET MVC是一种轻量级的,高度可测试的展示型框架(和WebForm对比),并且融合了已有的ASP.NET的特征,例如母版页以及基于会员的验证。MVC 框架是定义在System.Web.Mvc这个命名空间下并且这是一个基本的命名空间。并且支持System.Web命名空间部分。
MVC是一种标准的设计模式广为许多开发人员所熟悉。一些类型的网络应用程序将会受益于ASP.NET MVC,另外一些其他的将会继续使用传统的WebForm模式并使用postbacks,还有一些应用程序将会把MVC 和WebForm结合起来让他们感觉是近似的,当然,也不排除其他的方法。
MVC 框架包括以下组件:
步骤 01:调用Controller的action并且自带参数值。
- 模型层(Models):模型对象是程序的一部分实现了应用程序数据域的逻辑。通常的说,模型对象检索和存储模型陈述在数据库中。举个例子:一个产品对象也许会从数据库中检索信息,对它进行操作,写入更新信息然后回传给产品表在SQL SERVER数据库中。
在小程序中,模型经常在理论上分离,当然不是物理上的分离。举个例子:如果程序仅仅只是读了一个数据集然后把这个数据集返回给View,这个程序并没有一个和类联系起来的物理模型层。在那种情况下,数据集其实是扮演了一个模型对象的角色。
- 视图层(Views):视图是一个把程序显示在屏幕(UI)上的“容器”。通常来说,界面其实是从模型对象创建。一个例子,一个可编辑的产品表的视图,里面放了一些TEXTBOX,下拉框(DropDownList),一些CheckBox,当然这些都是 基于产品对象的。
- 控制层(Controllers):控制层处理用户交互,和模型层一起工作,无限制的选择一个视图去渲染显示出来的UI的一些组件。在MVC应用程序中,视图层只是负责显示信息,控制层处理以及回复给用户输入信息以达到交互的效果。举个例子:控制层处理查询字符串(query-string)的值,然后把这些值传给MODEL,反过来用这些值可以查询数据库。
MVC模式帮助你创建应用程序以达到分离应用程序的不同方面(输入逻辑,业务逻辑,UI逻辑),以达到对象之间的低耦合。MVC模式指定每种类型的逻辑必须建立在应用程序之上。UI逻辑其实属于VIEW中的。输入逻辑属于Controller,业务逻辑属于Model。分层模式能够帮你很好的管理当你建立好了应用程序以后,因为它能让你有时专注于某一方面的实现。举个例子,当你专注于VIEW的时候可以不用去担心Model的事情 == 。
除了管理起来方便以外,MVC模式在测试应用程序方面也比WebForm模式更加的简单。举个例子,WebForm程序中,一个单独的类经常使用2个文件去显示输出以及回发用户的输入。写一个自动化的测试对于基于WebForm的应用程序来说也许会很复杂,因为去测试一个独立页面,你必须实例化这个Page对应的类,所有的子控件,将会使我们在关注应用程序的某个部分而不去关注其他地方变得很困难,因此MVC模式的优势就显现出来了。更深一点的说,WebForm程序需要一个Web Server,而MVC框架会让组件之间降低耦合性以及大量使用接口, 使得单独的组件孤立于其他的框架成为可能。
低耦合在MVC应用程序的M-V-C的组件之间同样可以保证并行开发。比如,有3个开发人员,一个开发人员专注于控制层,另一个开发员专注于视图层,最后一个开发员专注于模型层的建设成为可能。
决定何时使用MVC模式比较合适
你必须非常小心的考虑什么时候去使用MVC框架或者WebForm.MVC并不能完全取代WebForm,你可以选择其一作为你应用程序开发的基石。
在你决定使用MVC框架或者WebForm去实现你的网站之前,权衡好各自的优势。
MVC框架的优势
MVC框架有以下几点优势:
- 使得完全掌控分离一个对象成为M-V-C3层模式变得更加容易。
- 不使用View state以及服务器控件。这使得MVC框架变得更加理想对于开发者而言(可以完全控制应用程序的行为)
- 使用了前端控制前模式通过网页应用程序的请求(单独一个控制器)。这样可以让你可以设计应用程序支持多路由结构,如果你想看更多关于Front Controller ,可以查看其MSDN文档。
- 对于TDD有更好的支持。
- 对于大项目来说(大量的人员在一个团队里面),需要高效的控制应用程序的行为。
WebForm的优势
WebForm的优势有以下几点:
- 支持事件模型保存状态在HTTP上,适合线性业务的网站开发,WebForm程序提供了很多事件以支持大量的服务器控件。
- 使用页面控制器模式对于独立的页面逐个添加,更多请看这里->Pgae Conroller
- 使用了ViewState或者服务器窗体,这让控制状态信息变得更加容易。
- 小的团队里面,或者是拥有大量服务器控件的想迅速开发的团队。
- 总体来说,相对而言开发程序还是不那么复杂的,因为组件(Page类,控件等等)都紧密的结合在了一起,相对于MVC模式不会有那么多的代码。
ASP.NET MVC模式的特点
ASP.NET MVC框架有以下特点:
- 实现了应用程序任务的分离(输入逻辑,业务逻辑,界面逻辑),可测试性的以及默认TDD。所有的核心类在MVC框架中都是基于接口的,能被模拟对象测试的。在程序中可以用模拟对象模拟实际程序的行为。你可以进行单元测试在不使用Controller的情况下在ASP.NET应用程序中,可以让单元测试变得快而舒适。你可以使用任意的单元测试去测试不同版本的.Net Framework。
- 一种可扩展和插件型的框架。ASP.NET MVC组件被设计成容易被替换或者定制的。你可以插入在自己的视图引擎里面,URL 路由规则,action方法参数序列化,以及其他组件。MVC框架也支持使用依赖注入以及控制反转容器模型。依赖注入可以让你注入对象到类里面,除了依赖类去创建对象本身。控制反转指定如果一个对象需要其他对象,第一个对象从外部资源应该得到第二个对象,比如一个设置文件(比如web.config),这将变得更加容易。
- 一个强有力的URL-mapping组件,让你建立可理解和可查询的URLS的程序。URLS不会包含文件名后缀,设计URL命名模式对于搜素引擎SEO来说是非常好的,以及表示状态传输寻址。
- 支持使用标记在已有的ASP.NET PAGE中(aspx文件),用户控件(ascx文件),母版页(.master 文件),你可以很方便的使用已有的ASP.NET特征在MVC框架里,比如嵌入式的母版页,单行表达式(<%= =>),陈述服务器控件,模板,数据绑定,本地化等等。
- 支持已有的ASP.NET的特征,MVC将会让你使用这些特征比如form效验以及windows效验,URL授权,成员以及角色,输出以及数据缓存,session和简要状态管理,健康监控,设置系统,提供构架。