MVC开发分享
这段时间很多人都讨论学习MVC,其实MVC架构也不是什么新鲜事,不过微软这段时间很重视asp.net mvc的发展,从1.0到2.0,在官网上把它看作WebForm的另一个分支来看待,VS2010也直接集成MVC开发模板,其火红程度可言而之。
我也跟着技术的潮流走了,学习并运用MVC做了一个小项目,一个Minisite通用模板。我体会到的MVC优点包括:
一、便于测试。因为UI跟逻辑比较好地分开了,所以测试业务逻辑的时候,不需要考虑呈现层的代码逻辑,直接对Controller和Model各自进行单元测试就OK了。(创建MVC项目的时候,提供选择是否创建对应的测试项目。)不过有经验的朋友也知道,真正做网站开发,并没有多少时间去做单元测试(领导一直催一直催,有时候功能都没有完善就赶着提交了,更不用项目测试)
二、分层开发。一般情况下,开发一个页面,会先定位实体类,然后在View的Page声明中用泛型引用实体类类型,如System.Web.Mvc.ViewPage<×××>,然后View开发者可以专注于呈现方面的设计,Controller处理业务逻辑。不过老实说,View开发者跟Controller开发者绝大部分时间都是同一个人,所以我开发的小项目中,没看到其带来了多大作用。
三、更多控制。开发MVC,感觉比较原始,不像WebForm那样,很多东西都集成了,不需要我们考虑。正因为没有太多的集成,所以我们可以有更多的控制权去控制HTML页面流程,当然控制权多了,开发的任务也多了!
除了上面的一些特点之后,其它MVC给我更多的感觉是不适应。
第一:MVC的页面交互事件是用form直接提交的,一个form对应Controller上的一个方法,即一种业务,因此一般也只在一个form内放置一个button,但有网站开发经验的朋友都知道,一个页面往往会有多个Button,所以在MVC下,只能是每个Button就对应写一个form,这给列表型数据呈现时带来了相当的不便,比如一个列表每一行都有一个Delete按钮。当然,这里有另外的解决方式,就是新建一个View来专门处理Delete事件,但这样也引入了另一个麻烦,就是带来更多的页面开发。
第二:使用.NET版本的FckEditor时,Post回来的数据的键值与FckEditor控件的ID号不一致(这与FckEditor的处理机制有关),因此处理的时候会比较别扭。不过后来我使用FckEditor的Js版本,直接用Js来控制,这样View跟Controller对应的键值是一致的,不过这里要注意的是,需要在Controller的Post处理方法中加上[ValidateInput(false)]属性。
第三:没有WebForm上强大的控件集的支持,比如文件上传的时候,没有FileUpload这样控件的支持,处理起来不是很文便,需要直接对Request.Files集合人工操作。
第四:学习资料不多。官网上提供了一个教材NerdDinner学习文档,不过这文档比较初级,深入的功能没多少介绍,特别是MVC下的Attribute使用(很多东西都是用Attribute来控制的)。
总的来说,用MVC来开发,开发速度会比WebForm慢,如果项目不大,我想是无办法体会到MVC带来的先进架构的。(我只觉得它比较麻烦,呵呵)在这次开发中,我没有在MVC下使用Ajax,但我个人觉得MVC会比较适合与Ajax结合,开发Ajax网站。还有一些大型项目,比较重视测试,分层结构,以及层次的分工,MVC会带有一定的好处,但这是以开发成本来代价的。如果是三两个月的小项目,我个人不太推荐使用MVC,特别是后台管理,因为有很多的数据展示,使用WebForm会有大量的控件支持,对开发非常有利。
另外,我还有一个疑惑 ,希望知道答案的朋友,能够解答一下:在MVC下,如何把Controller与View分离到不同的项目下?是否一定要自己重写路由?

浙公网安备 33010602011771号