紧跟时代步伐,让我们拥抱MVC 3
作为一个开发者,我们不希望技术很快的更新,这是因为我们还没有完全掌握原来技术的基础上,又要掌握新的技术,作为天天忙忙碌碌的程序员,我们不希望还要额外的时间来学习,尤其是当我们的年龄,逐渐的变大的时候,但是有时候跟上时代的步伐也会给我们带来很多的好处,我今天要说的主题就是让我们从MVC 2 升级到
MVC3 吧,因为他带给我们太多的是惊喜,而不是学习的苦恼。
可能有的园友要嗤之以鼻了,每个技术的更新都会带来新的学习点,我们总是要不断的学习来跟上他们,我们会很累的?的确,作为一名程序员,我们每天总是睡得很晚,起的很早,很多人喜欢叫我们夜猫子,因为只有在夜深人静的时候,我们才能投入精神来学习而不被打扰。但是就算我们不想每天这么累,我建议每个MVC人员,从MVC 2 升级到MVC 3 吧,因为他能改善我们很多的工作时间,增加工作效率,甚至会减少很多bug。你不信,那么我们就一起来分析一下,究竟是升级MVC 3带来的好处多,还是浪费我们学习的时间多吧。
asp.net MVC 2发布已经过去了很长时间了,我们也是从它开始来真正的开发我们的网站应用程序的,那么我们想一下,MVC 2 带给我们的有哪些不便之处呢?我来
列举几个比较重要的缺点吧。
- 如果你想在MVC 2中控制每个Action 的执行是否会出现异常,你会怎么做呢?你可能的做法就是定义一个可以处理异常的Attribute,然后分别应用到每个Action或者是Controller上,来捕获出现的异常信息?或者还有一种方法就是定义一个基类,让所有的Controller都继承自这个基类,而我们在基类中捕获异常。据我个人所知,大多数人采用的也就是这两种处理异常的方式,但是我们来考虑一下它的缺点。第一个处理异常的方式很明显就是啰嗦,第二个呢,使我们在Web form时代通用的方式,肯定不错。但是我们从另一个方面来想一下,如果说我们除了要捕获异常信息之外,还要添加验证,那么应该怎么做呢?
C#是单继承的,这个问题留给园友们来思考?在MVC 3中这个方式得到了解决,就是全局Attribute - 在MVC 2中,如果你想添加一个后台管理系统,你会怎么办呢?其实这个有一个很好的解决办法,就是另外添加一个MVC 应用程序,用来作为后台管理系统?其实这真的是很好的处理方式,虽然我个人没有采用MVC 2开发过任何的系统,但是我还是非常欣赏这种折中的处理方式。但是这同样带来了另外一个问题,所有的资源文件得不到重用,甚至是css文件?你不得不重新建立各个目录来进行存放,还有一个非常直接但是非常重要的问题摆在了面前?htmlhelper类可以在后台管理系统中访问到前台页面吗?我们可以在同一个IIS目录下访问这两个不同的应用程序吗?我想是不能的,首先htmlHelper类中的方法是无法应用到前台页面的,还有在同一个地址中是不可能访问到这两个不同的应用程序的。这会带来非常严重的问题,毕竟在后台无法访问到前面页面就是客户无法接受的问题?我们又能如何处理呢?MVC 3中对应的就是Area
- Razor视图也是一个我们不得不提的重要因素,我们都知道MVC 2遵循的是web form时代的<%%>方式,这令我们在前台构造复杂的逻辑分离时是十分痛苦的?如果说你想在前台显示一个列表,那么foreach是我们都会采用的方式,我们知道在foreach中我们会使用到多少个<%%>,这会令我们的程序非常难懂,并且非常容易出错。而Razor视图就是利用@符号作为处理方式,简洁的方式绝对是我们想象不到的好用,只要你用了它,相信你会爱上他。
- MVC 3 使用到了Nuget,这是一个非常好的扩展插件,可以自动更新我们程序的引用到它的各个地方,甚至包括web.config配置文件。
- 在MVC 3中母板页没有了.master,所有文件的后缀名都是.cshtml,这当然会使我们收益,毕竟只要我们愿意,可以指定任何文件作为母板页,哪怕只是为了单纯的嵌套使用。
- MVC 3增强了htmlHelper类,让我们的开发更加的流畅。
- 依赖注入一直是我比较喜欢研究的一门技术,当然我现在还没有完全的入门依赖注入,但是我深刻的感受到MVC 3对依赖注入的完美支持,只要你愿意,任何IOC框架都可以应用到MVC 3程序中,从而实现更好的替换功能。
说了这些MVC 2中 相对MVC 3所不具有的缺点,相信你也可以更加感受到MVC 3真的值得我们去学习,虽然说现在MVC 4已经出来了,但是我还是建议你学习一下MVC 3,因为越级的学习会给我们以后的深入带来很大的困扰。虽然说我介绍的很大概,但是我想同是作为程序员的你,一定可以理解我说的是什么意思。尤其是MVC 3 所带来的全局Attribute以及Area两种技术的更新就可以让我们有足够的勇气去面对升级带来的任何麻烦。相信我吧,升级一下自己,带来的可能是更大的收获。
最后,展示一下MVC 3的razor语法,相信你会深深的爱上它。
1 @{
2 Layout = "~/views/shared/_layout.cshtml";
3 }
4 @using MvcWeb.Extensions
5 <!DOCTYPE html>
6 <html>
7 <head>
8 <title>Index</title>
9 <script src="http://www.cnblogs.com/Scripts/jquery-1.5.1.js" type="text/javascript"></script>
10 <script type="text/javascript" src="@Url.Content("http://www.cnblogs.com/Scripts/jquery-1.5.1-vsdoc.js")"></script>
11 <script type="text/javascript" src="@Url.Content("http://www.cnblogs.com/scripts/jquery.validate.js")"></script>
12 </head>
13 <body>
14 <div>
15 <form id="form" action="" method="post">
16 <input type="text" id="user.Name" name="user.Name" />
17 @{ this.Jquery().Validations().Required("user.Name", "用户名是必填的 亲");}
18 <select name="user.Gender">
19 <option value="">Please select...</option>
20 <option value="1">Male</option>
21 <option value="2">Femle</option>
22 </select>
23 @{ this.Jquery().Validations().Required("user.Gender", null);}
24 <input type="text" name="user.Email" />
25 @{this.Jquery().Validations().Element("user.Email").Required("邮箱是必填的").Email("请填写正确的邮箱格式");}
26 <input type="submit" value="提交" />
27 </form>
28 @{
29 @:fdjkfdjkf
30 // hjkhkjhkj@:fdfdfdf
31 <text>
32 dsdsd
33 dsdsd
34 dsdsd
35 </text>
36
37 }
38 </div>
39 <script type="text/javascript">
40 @Html.Raw(this.Jquery().Validations().ToScripts("#form"))
41 </script>
42 </body>
43 </html>
razor语法一定会带给你很多的惊喜
紧跟时代步伐,让我们拥抱MVC 3的更多相关文章
- 24 | 紧跟时代步伐:微服务模式下API测试要怎么做?
- 预训练模型时代:告别finetune, 拥抱adapter
NLP论文解读 原创•作者 |FLIPPED 研究背景 随着计算算力的不断增加,以transformer为主要架构的预训练模型进入了百花齐放的时代.BERT.RoBERTa等模型的提出为NLP相关问题 ...
- Asp.Net MVC 3
Asp.Net MVC 3 wcf基础教程之 契约(合同)Contract 摘要: 在前几篇博客中我有说到服务的寄宿,就是服务要运行起来必须采取的几种方式,相当于我们可以照葫芦画瓜的效果运行一个w ...
- 【转】物业管理与移动互联网科技|微信公众平台,物业app,物业O2O
[导语]当下,物业管理行业正在接受新科技浪潮的冲击和洗礼,业界企业纷纷探索物业服务的新发展模式.云服务.微社区.微信公众平台.app等,这些本来陌生的词汇在物业管理行业变得耳熟能详.在借助科技手段拓展 ...
- Odoo免费开源企业信息化平台助力企业成功
企业信息化变革之路 信息孤岛的真实由来 打开百度App,看更多图片 左边为当下企业现状,右边为Odoo的整体 企业信息孤岛的严重性,来自于企业的自身高速发展,企业以销售为生命主题围绕着客户会搭建一系列 ...
- API 测试的具体实现
目录 API 测试的具体实现 基于 Spring Boot 构建的 API 使用 cURL 命令行工具进行测试 使用图形界面工具 Postman 进行测试 如何应对复杂场景的 API 测试? 总结 A ...
- sinoces 2013 消费电子
转眼距离上次看消费电子(http://www.cnblogs.com/sun8134/archive/2012/07/08/2581997.html)又过了一年 也到了今年的消费电子展… 结果一天小雨 ...
- 浙江天搜科技落棋人工智能,加速AI产业布局
8月31日,2018年IFA大展在德国柏林正式开幕.IFA是全球三大消费电子展之一,在世界范围内久负盛名,被誉为“未来科技风向标”.在这个万众瞩目的展会上,号称“给智能世界铺上云的跑道,装上智能发动机 ...
- 一、选择与安装——Linux学习笔记
A)为什么要用Linux做服务器? 网络理由: 1.linux本身是网络操作系统,支持所有TCP/IP协议,网络功能是内核中六大模块之一 2.linux和unix兼容,unix是早期的服务器霸主,现在 ...
随机推荐
- OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,<Type>),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵, ...
- Android在线更新 远程安装程序
原文:http://blog.csdn.net/jasper_success/article/details/7984065 第一步:使用java.net的URLConnection对象来创建连接 第 ...
- [AngularJS] Using AngularJS interceptors with $http
Sometimes you might need to modify HTTP requests and responses. This could be for a variety of reaso ...
- 函数组:FACS(FI/CO接口的FI服务)
这个函数组可以执行与财务相关的各种检查,具体功能请自行发掘. 包含下列函数: ACC_ROUNDING_DIFF_DETERMINEACC_ROUNDING_DIFF_LINEITEMAC_KURSF ...
- mysql replication inside
http://keithlan.github.io/2015/07/16/mysql_replication_inside/
- Git链接到自己的Github(2)进阶使用
接着上一篇的,从github clone下代码. 1.先查看当前开发分支 $ cat .git/HEAD ref: refs/heads/master 这里的master是默认分支. 2.查看当前状态 ...
- C#_Wpf_DataContex上下文整个类绑定
<Window x:Class="UserStore.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2 ...
- 绿荫工作室爱选修app内测
下载地址:http://greendasungta.com/greencms/ixuanxiu.apk 开发目的是用于方便在校生的选课操作以及对选修课的交流.
- how to learn algorithms(ZAC)
(这一篇觉得写得很棒,故拷过来以便慢慢看,细细体会,详情请访问http://blog.csdn.net/shenmen123456/article/details/6575647) 第一阶段:练经典常 ...
- JAXB - Annotations, Annotation for Classes: XmlType
This annotation adds information that would be available from a schema type, but isn't implied by a ...