[转载]MVC与轻量化的WEB开发模型(1)

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的思想,却很伟大。如果不正确,请指教。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏