一起谈.NET技术,浅谈ASP.NET MVC

在正式的工作中使用ASP.NET MVC也有一阵子了,也看了听了很多关于ASP.NET MVC别人的想法和代码,我认为很多人对于它的理解是错误的。

在这里我只谈谈对ASP.NET MVC我的一些想法,希望大家多多讨论。

1. ASP.NET MVC区别于ASP.NET在于设计理念

我听过的关于ASP.NET  MVC的第一个看法是ASP.NET MVC最大的特点在于Controller和View的分离,当时我还不懂ASP.NET MVC是什么东西,但是当我第一眼看到这个框架时,我就认为这个观点是错误的,我认为ASP.NET MVC最大的特点,也是最大的优点是由Controller来驱动整个项目的开发进展

我们知道,在一个项目的面向对象分析与设计过程中,我们一直都在围绕着人,可能是角色,也可能是涉众来分析和设计整个项目。人,全都是人!站在整个类设计结构最上层的就应该是人,然后我们接下来应该去分析这个人有什么特征,我们这个人要做什么(记住,而不是这个人可以做什么)。也就是说,除了人之外,接下来的层次就应该是这个人的行为,也就是整个系统中的Action

好,接下来我们可以回想一下我们最初的ASP.NET Webform时代,我们是如何开发一个系统的,我们写出一堆设计文档,然后美工给我们页面,然后就是我们常说的“套页面”。对于这个做法,也就是我在之前文章中调侃的“PDD”(页面驱动开发)。缺点我就不说了,在前文中我想我已经说得很清楚了。

那么我们想想,其实我们会觉得Webform是个天然为了PDD而生的产物。当提及三层架构时,很多人都有一种看法是ASP.NET本身就是三层的,我们暂且不管这个说法对不对,至少可以说明,很多人都天然地把.aspx.cs当成了其中的一层,这就造成了aspx和aspx.cs这两层的完全耦合性。

但是ASP.NET MVC好在哪里?一个用户访问,并不是在访问某一个页面,而是在访问某一个功能(Action)。这就是面向对象分析的最基础方法。

那么我们在开发ASP.NET MVC时就应该先考虑我们需要哪些功能块,这就是我们的Controller,然后在这个功能块下,我们都需要哪些功能,这就是我们的Action。至于页面,应该是应该由功能来驱动我们的页面开发,这才是Controller驱动整个项目开发的核心!

但是我想仍然有很多公司在用开发ASP.NET时的那一套PDD来开发整个项目,我想,这就是没有掌握到ASP.NET MVC的精髓之所在吧。

ASP.NET MVC要点一:先开发Controller,页面完全可是先束之高阁,由Controller而不是Page来驱动整个项目开发。

2. Controller的代码组织

在整体的架构中,个人认为Controller更像一个Facade,他提供给用户一个访问接口,在这个接口背后是复杂的业务逻辑

但是我看到很多公司的代码都在Controller掺杂进了复杂的业务逻辑,甚至会出现了几百行,几千行的Controller,这是我没办法理解的。

让我们想想Facade,他的目的是这样的:定义一个高层接口,这个接口使这一子系统更加容易使用

在我看来应该注意这样几点:

A. Controller中不应该包含任何private和protected方法,一个Facade类只应该由对外暴露的方法,他只是对其他类方法的整合

B. Action不应该处理任何细节方面的逻辑。个人认为,每个方法之中仅应包含他下一抽象层次的方法,而不应该出现抽象层次的杂糅以及抽象的层次跳跃

C. Action本身其实就是一个方法,正如代码规范上所说的,方法应该只是动词或者动宾短语,而不应该出现名词作为方法名的情况。因为用户是希望做某一项动作,而不是得到某一种东西

3. 最后

本来感觉有好多话想说,可是写着写着却发现不知道该写什么了,下次再说吧。

最后,个人建议,学习ASP.NET MVC可以参考一下Java界的一些成熟思路,有些其实和ASP.NET MVC非常像,比如Struts,还有Spring MVC。

打算接下来的时间看一下。欢迎大家共同讨论学习。

时间: 2024-11-29 01:53:27

一起谈.NET技术,浅谈ASP.NET MVC的相关文章

一起谈.NET技术,[翻译]ASP.NET MVC 3 RC 发布通告

今天早上,ASP.NET组发布了ASP.NET 3 RC版(release candidate).你们可以从这里进行下载here. ASP.NET MVC 3是个很完美的发布,增加了大量的功能改进.它可以向后兼容ASP.NET MVC V1 和 V2,可以轻易的升级你现有的项目(可以阅读发布须知,根据里面的步骤去做).你还可以通过我之前发表的博客文章来学习ASP.NET MVC 3的很多功能.  今天的ASP.NET MVC 3 RC build 包含了一些附加的功能改进(除了修正了一些bug外

一起谈.NET技术,跟ASP.NET MVC一起使用jQuery

藉由ASP.NET MVC内置的扩展性,开发人员便可以使用第三方库,例如jQuery.在使用ASP.NET Webforms的时候,如果使用jQuery而不是ASP.NET AJAX,难度会比较大. 刚开始撰写本文的时候,ASP.NET MVC的版本是Preview 4,有些在Preview 4中使用的技术可能无法在早期版本中正常工作.Preview 4可以在CodePlex上下载. 初步配置 我不打算把它写成一篇完整的jQuery指南,只是简单给出几个跟ASP.NET MVC一起使用这款Jav

一起谈.NET技术,在ASP.NET MVC中进行TDD开发

TDD介绍 TDD是一种开发方法,全称是Test-Driven development,中文是测试驱动开发.作者是Kent Beck.首先让我介绍一下三种常见的开发方式: 第一种:先Coding,然后Bug Fix. 第二种:先Coding,然后Unit Test,最后Bug Fix.很显然用了单元测试的比第一种开发方式要好不少. 第三种:就是本文要说的TDD,它的方式和第二种恰恰相反.TDD先设计单元测试,然后再Coding,最后修复Bug.看下图: TDD开发过程可以看成:给制自己制定一个目

一起谈.NET技术,利用ASP.NET MVC源代码调试你的应用程序

之前写了一篇博客:利用.NET Framework4.0的源代码调试你的应用程序.那篇文章教你如何利用.NET Framework4.0的源代码帮助你调试应用程序,其实也就是进入.NET Framework4.0源代码进行单步调试.由于项目需要,最近学起asp.net mvc.昨天遇到ViewData和TempData他们之间的分别这样让我纠结的问题.有园友强烈建议我去看ASP.NET MVC的源代码.所以,我想到如何在调试ASP.NET MVC程序的时候,有不明白的地方,就单步进入ASP.NE

一起谈.NET技术,体验ASP.NET MVC 3中的Razor特性

1 闲话ASP.NET MVC 3 beta 不知道不觉MVC3更新了好几次了...因为一直在弄Silverlight的开发没有时间关注ASP.NET MVC.之前出preview 的时候就看了园子里的一些文章. 但是总觉得"不咋地",依赖注入早就有一套了,全局拦截器也就那么回事..好像都没有对开发效率有太大的提升...(一己之见.目前正在学习MVC3BEAT的DI). 除了RAZOR...  好吧. 现在开始动手吧! 2开工  2.1目录     在_ViewStart.cshtml

一起谈.NET技术,将ASP.NET MVC 2.0 部署在IIS6和IIS7上的教程

开发环境:Win7+IIS7+VS2008 SP1+ASP.NET MVC 2.0 RC 在部署MVC应用之前,一定要确保你的程序BIN文件夹下面是否包含 System.Web.Mvc.dll(非常重要),如图: 如果没有, 请在你的MVC项目中,打开引用列表,如图:   鼠标右键点击System.Web.Mvc,选择"属性",转到下面窗口: 将"复制本地"设为True (默认为False),然后生成一下项目,System.Web.Mvc.dll就会出现在BIN文件

一起谈.NET技术,探索Asp.net mvc 的文件上传(由浅入深)

代码下载:http://files.cnblogs.com/n-pei/mvcfileupload.zip 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Google了很多资料,和大家分享下. 1.最基本的文件上传 在View界面通过Form把数据POST到控制端(Controller),Controller把文件存储到服务器,再Redirect到其他页面. View部分的代码: Controller部分需要判断是否有Post过来文件,有文件就保存,再重定向到index页面. 上

一起谈.NET技术,在ASP.NET中自动合并小图片并使用CSS Sprite显示出来

前几天MS的ASP.NET小组推出了一个小组件:Sprite and Image Optimization Framework,用于生成Sprite CSS,及将小的图片生成一副大图. 下载地址:http://aspnet.codeplex.com/releases/view/50140 8189E6B8-FBE4-4F01-8F9F-5687C0EA9F59 下载后工程中有一个类库,一个ASP.NET WebForm示例以及一个ASP.NET MVC示例. 下面我们就看看ASP.NET MVC

领先技术:在ASP.NET MVC 4中创建为移动设备优化的视图

如果深入探讨有关编写移动设备网站的常识性考虑因素,会发现其中有一种内在矛盾.一方面,客户在其 编写应用程序和网站的方法中强烈要求(或乐于要求)移动优先.另一方面,同一些人又经常称赞 CSS 媒体 查询和流体布局.我所发现的矛盾在于经常利用 CSS 媒体查询和流体布局并未在其他内容之前优先处理移动 方面,它不是一种移动优先的方法.在本文中,我将介绍如何使用服务器端逻辑为给定设备呈现最佳的显示效 果,并介绍 ASP.NET MVC 4 的一种新功能,称为显示模式. 问题不在于 CSS 媒体查询作为一

一起谈.NET技术,走向ASP.NET架构设计——第一章:走向设计

前言:很多做开发的人都在不断的摸索着,积极的学习,试图找出一条走向架构设计的成功法则.每当有人问起我们的职业,我们也常常在说:"软件设计".有时,我就在想:"设计",这个已经被我们嚼烂了的词,到底有多少人真正懂"设计"的含义. 自动进入IT,走在开发这条路上,就一直在不断的摸索,寻找,苦思:如何能够才能成为架构师.于是在网络上不断的收集和阅读架构设计方面的书籍和资料,到处在找一些架构师的传记,文章和甚至是采访资料..... 同时一直不断的请教自己