学习ASP.NET MVC3(1)----- 概述
什么是ASP.NET MVC
它是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架,是ASP.NET WEBFROM后的又一种开发方式,而并非替代方式!
MVC并不是微软首创的,实际上在很早以前,上世纪80年代的时候就有人提出了这个模式,它是一个软件工程的理念
微软以前的开发一直是事件驱动这样的(wpf是例外,它是基于数据驱动,我总感觉MVC和WPF的MVVM有种异曲同工之妙),在最近这些年MVC被大量的采用(我想学过JAVA的没有人不知道MVC吧),微软不甘落后,而后开发出了基于ASP.NET的MVC
微软MVC官方网站:http://www.asp.net/mvc
源码网站:http://aspnet.codeplex.com/wikipage?title=MVC
上面两网站都是英文的 如果没有一定的阅读能力就不要看了 ,像我这种英文很烂的人根本就没看过······
ASP.NET MVC的特点
1.分离任务,也可以说是关注点分离,视图、控制器、模型这三者之间关注点几乎是完全分开的,所以他们之间耦合非常低,维护起来很方便。(如果以前使用过AOP对理解这会很有帮助)
2.可扩展,由于关注点分离了耦合小了,它的扩展能力相对而言也会提升
3.强大的URL重写(路由)机制
4.兼容ASP.NET现有的技术(大家可以看嘛,既然叫ASP.NET MVC,那他必然和ASP.NET有关系。MVC运行机制仍然是在ASP.NET基础框架之上)
5.开源
ASP.NET MVC的优点
其实优点就i是上面那些特点所带出来的
1.通过把项目分为model、view和controller,使得复杂项目更加容易维护(接触过或是亲手写了几个例子才能深刻体会到,后面的文章会慢慢讲到)。在以前的WebForm里,其实是很难真正做到业务逻辑与视图分离的,由于这里面是存在一个PostBack机制模拟我们的事件,造成了视图与后置代码的耦合加深
2.没有应用ViewState和服务器表单控件,可以更方便的控制应用程序的行为(没有postback等"虚幻"的东西,web是什么样就是什么样,回归到原始)
3.应用程序通过controller来控制程序请求,可以提供丰富的URL重写
4.支持测试驱动开发
5.在团队开发下表现更加出众(职责分离)
为什么需要ASP.NET MVC
1.关注点分离
2.高可扩展性
3.更好的可测试性
4.更好的URL重写
5.更好的性能(生命周期更短,没有了ViewState这种隐藏的数据在客户端与服务器来回传输,回归到了最原始的web状态,传输的数据量更小等等等等)
6.更灵活的HTML代码控制(比如WebForm会把标签的id或name改变,MVC就不会)
....
版本历史
ASP.NET MVC 1
经过漫长的Preview和2个RC的版本后,2009年3月,微软正式发布了ASP.NET MVC1
这是微软官方在MVC领域的第一个Web Application框架,带来与WebForm几乎完全不同的开发理念
但由于某些原因该版本缺失了Area等关键技术点,以至于用该版本开发复杂的web应用时会有诸多困难
ASP.NET MVC 2
在1.0发布后不到1年的时间,ASP.NET MVC2正式发布
2010年4月12发布的VS2010和Visual Web Developer 2010正式版中内置了对ASP.NET MVC 2的扩展
ASP.NET MVC 2给我们带了众多期望已久的功能,如:强类型的HTML Helper、数据验证、自定义模版、Area、异步Controller...
.Net4的新技术,也给ASP.NET MVC 2应用开发带来了一些不错的新体验,如:dynamic类型、带有默认值的方法参数...
Why ASP.NET MVC 3?
用过MVC 2的人都知道,ASPX视图中充斥着<%...%><%...%><%...%>! (这个真的很崩溃,代码稍微长点,人就容易看晕)
Action过滤器无法全局!
对404、301、302等的http响应状态,缺乏对应的ActionResult类型!
缺乏模型(model)数据验证的直接支持!
对依赖注入(DI)、控制反转(IOC)支持不够好!
不支持Grid?
ViewData用起来有些麻烦?(全靠我们伟大的神奇的字符串,View["字符串"]=object)
....
ASP.NET MVC 3
增加Razor视图引擎,支持多视图引擎 (使用@代替了<%%> ,语法简单清晰,容易学习,VS2010提供了智能提示和语法变色)
全局的Action过滤器
新的ViewBag属性 (实际上就是dynamic类型)
新的ActionResult类型
Model Validation
Json绑定支持
Dependecy Injection
HTML5、CSS3
部分页的输出缓存
HtmlHelper的增强
NuGet
ASP.NET MVC 4
没什么好讲的 暂时不会去接触它