来源:jdong - 博客园
前一段时间做一个网站项目,使用win2003+.net2.0开发;在学习了一些.net的相关知识后,并考虑到此项目需要多人合作,以及架构清晰、 URL重写等优点,决定用MVC方式开发。但微软的asp.net MVC框架据说要下半年才出正式版,而且还需要.net3.5,其他的MVC框架又不熟悉,估计也需要一段时间学习。由于开发时间比较紧,我们开发小组中也没有一个对asp.net及asp.net MVC框架非常精通的人,所以又想转回使用传统的asp.net编程方式开发。
在两难之际,我想也许可以在项目需求出来前,自己试着写一个MVC架构出来,因为以前曾用PHP和JSP写过类似的MVC架构,而Web的运行环境和编程语言,相通的地方还是很多的,于是就有了下面这个asp.net的MVC架构。
一、MVC编程:
针对用户的浏览器来说,网站可以看作一个实体、一个接口,其接收浏览器的请求,并将相应的信息返回给浏览器;因此,网站程序完全可以用一个程序来完成,而实际上也确实如此,IIS、apache等web服务器本身就是一个程序,而运行其中的asp、aspx、php、jsp、html等等的单个页面,只不过是帮助web服务器来实现一定功能而已。
由此可以引申出:我们完全可以用一个aspx页面来处理针对网站的所有动态请求。
而这个页面,我们就把它起名为index.aspx吧。
在apache、tomcat等web服务器,都有相应的技术,将网站符合一定规则的所有http请求,都转向一个程序页面(如index.jsp或 index.php)来处理。而IIS在IIS7(前面提到,我们的网站服务器是windows2003,IIS版本为6.0)出来以前,只能借助于第三方组件实现(windows2008的IIS7.0可以不借助第三方组件实现URLRewrite,网上可以找到相关代码)。这其中比较有名的2个是 ISAPI_Rewrite(Full版收费,Lite版免费)和IonicIsapiRewriter(免费),而对于我们这个MVC架构来说,ISAPI_Rewrite Lite版(下载ISAPI_Rewrite Lite,这里有ISAPI_Rewrite Lite的最新版本,我们使用的是ISAPI_Rewrite3_0047_Lite.msi)就足够了,由它来控制请求到我们的 index.aspx(具体代码参见DotNetMVC示例网站代码)。
(一) 网站的目录结构
为了使图片、css文件、js文件、html文件等免于ISAPI_Rewrite处理,需在网站根目录建立一个单独的mvc目录,其中存放MVC架构需要的aspx文件,从而网站的目录结构如下:
ROOT
|--App_Code
|--DotNetMVC
|--DAL
|--UserDA.cs
|--Model
|--User.cs
|--Util
|--ControllerUtil.cs
|--DBUtil.cs
|--Bin
|--log4net.dll
|--css
|--images
|--js
|--mvc
|--application
|--controllers
|-default.aspx
|-user.aspx
|--views
|--default
|-index_view.aspx
|--share
|--user
|-home_view.aspx
|-list_view.aspx
|--cache
|--log
|-index.aspx
|-Default.aspx
|-Global.asax
|-web.config
上面的结构中,css、images、js放什么文件分别存放站点用的样式文件、图片文件、javascript脚本文件;Bin存放公共组件(目前有一个日志组件log4net.dll,其配置信息在web.config配置文件中),App_Code存放自定义的公共类,这是.net2.0规定的,mvc目录的作用上面说了,不再赘述。
下面再看App_Code和mvc下的子目录构成:
App_Code->Util目录,存放一些实用工具类,目前有2个,DBUtil.cs是SQLServer数据库处理工具类,而 ControllerUtil.cs则是我们这个MVC架构