浅谈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。

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

posted @ 2010-07-19 00:01 飞林沙 阅读(...) 评论(...) 编辑 收藏