MVC与轻量化的WEB开发模型(1) – imfunny – 博客园.
提到MVC的时候总会有人想到ASP.NET MVC。其实倒不是,MVC更多的是一种思想。而ASP.NET MVC只是把这些给具体的实现了而已。MVC模式的缺点是由于它没有明确的定义,所以完全理解MVC模式并不是很容易。如果想看下MVC的一些理论知识, 可以看下这篇。http://zh.wikipedia.org/wiki/MVC
而流程侧如下。
OK,举例说明什么是MVC.
1:去商店买东西,付款拿到东西走人。
2:在有的地方可以付款,然后拿小票,然后再去买东西走人。
付款到取货的流程就是控制器。这两种形式其实很贴近与WebForm和Mvc的现实模型。第一种任何地方都可以付然后直接取货,第二种统一到一起进行支付然后有小票发货。
尽管有许多人都捍卫着WebForm或者ASP.NET MVC,争辩到底那种方式好或者不好,都是以偏概全,因为条条大路通罗马。选择你自己的支付方式就行了。求同存异。现实中也没见的上面的两种支付方法灭绝。
网上说的很多WebForm的缺点,比如依赖HttpContent,难以单元测试,ViewState。现在这些早就被人解决了,webform 依然可以进行mock,ViewState也可以关闭。而个人认为WebForm的缺点就是曾经看过了一个系统,后台aspx文件800多个,于是打开后 台目录哥头晕了。
首先看下其他的语言对于mvc的web开发模型是如何设计的。为什么不使用ASP.NET MVC,可以看下本文最下边。
ROR(Ruby on Rails)的。这个几乎是所有mvc的鼻祖。ASP.NET MVC就是这个的C#版。
1
2
3
4
|
class IndexController < ApplicationController def Index end end |
然后在 app\Views\Index\Index.rhtml 建立 Hello, world!
Ruby Sinatra的编码结构
get '/Index' { "Hello, world!" } |
Python django的编码结构
from django.http import HttpResponse def index(request): return HttpResponse( "Hello, world!" ) |
Python bottle的编码结构
import bottle app = bottle.Bottle() @app .route( '/index' ) def index(): return "Hello, world!" if __name__ = = "__main__" : app.run() |
看了那么多语言的表达。其实还是Sinatra和bottle表达的清晰点。相信很容易选择那种模型来做开发,直观的代码表达其实是件很重要的事情。
net其实有一个框架,叫做Nancy。地址在这里。https://github.com/NancyFx/Nancy。很多大牛在开发维护。也是个不错的项目。可以比拟与spring.net.
它的编码结构是这样的。想玩下的自己去下吧。
public class Module : NancyModule { public Module() { Get[ "/greet/{name}" ] = x => { return string .Concat( "Hello " , x.name); }; } } |
于是需求已经很明确了。
1.非常的高效。具备很好的可开发性。
2.方便测试代码。可以自由的Mock测试代码,最好能够自动单元测试。
3.代码表达很清晰。最好是Python bottle或者Sinatra那种,不需要动脑筋就知道代码在表达什么。
4.无需配置RouteMap,简单的路由表达。
5.支持IIS6,7,7.5,无需改动支持经典模式和集成模式,方便简单。(比如凡客怪异的url,可以用google搜索下“凡客 .mvc”就知道了。)
6.良好的插件机制。
7.实现上面所有的。
有了需求以及知道想要什么,一切都变得简单了,篇2就开始一点点的从新制造一个轻量化的轮子吧。实施上一个mvc结构的200行代码就over了。
题外话:为什么不使用ASP.NET MVC。。
ASP.NET MVC其实并不完美的原因在于,第一太大了,第二太慢了,特别是第一次打开,简直都无敌了。第三Ruby on Rails的Route都已经很糟糕了,结果ASP.NET MVC很生硬的搬过来了,继续糟糕,RouteMap太生硬了。比如/User/Content/View/1,必须要借助与RouteTable来管理 路由请求,囧爆了。而在Python bottle侧就是@app.route(‘/User/Content/View/:id’) ,Nancy就可以/User/Content/View/{id}这些可以直接定义在方法里来表达以及获取值。第四就是兼容性不够好。比如对于iis经 典模式的支持。
所以ASP.NET MVC尽管很好,但是有些缺点也很致命。每个人都有每个人的理由,求同存异。但是mvc的思想,却很伟大。如果不正确,请指教。