Asp.Net中实现自己的Mvc开发框架

如今mvc框架越来越流行,像现在微软推出的asp.net mvc都已经到了2.0版本了,而在java界的struts也早已成了j2ee开发的首选。工作之后,看到公司也有自己的一套mvc框架,所以闲暇之余就想自己来实现一个mvc框架。

我个人觉得这个mvc框架实现并不难,关键在于设计思路以及对于mvc本身的理解。废话不多说了,直接步入正题(对于mvc的基本知识在此不再多说)。

1.架构分析

1.1熟悉mvc请求过程:

对于web应用程序来说,只有一个事件就是请求,所有的交互都是通过“请求响应”的形式出现的。整个过程可以说就是得到请求、处理请求、显示给用户的过程,而之所以引入mvc就是为了将逻辑处理和页面显示分开。上图显示了一般mvc框架对于请求的处理过程,我们的框架也会沿用此过程,所以我们分析一下这个过程:一个请求到来之后首先会根据请求内容,将请求交给控制器,控制器根据请求具体内容做出相应的处理,而我们知道不管对怎样的逻辑进行处理最终都会转化为对数据的组织,因此这是就会调用相应的数据模块,最终将数据组织好最终交给视图来显示。

整个过程是很好理解,那么我们用程序实现呢?我想此时就会出现几个问题:如何交给controller?controller如何知道什么样的请求做出什么用的处理?Controller知道处理什么请求之后如何具体实施?如何将处理组织好的数据交给view?带着几个问题继续往下看。

1.2引入HttpHandler

我们知道如果在应用中加入HttpHandler程序,并且在web.config中做出相应的配置的话其HttpHandler程序就会执行。那么我们不妨利用HttpHandler程序根据请求的url来执行相应的controller程序(确切地说是controller中的一个动作action)。

1.3引入Asp.Net Mvc的url机制

我们可以得到url,那么如何根据url处理相应action动作?解决办法现在大致分为两种:一种就是像struts一样,使用配置文件,根据一个特定后缀得到对应的名称,然后在配置文件中找到此名称对应的程序;另一种就是像asp.net mvc一样做出相应的约定,根据url格式进行相应的提取,找到对应的程序。而我个人认为后者更有利于开发,因此我们采用后者。

 

1.4引入反射

即使知道要调用哪个action,那么如何去调用呢?这个问题其实就要引入.Net的反射机制,我们将通过反射动态创建Controller的实例并且根据的得到的信息调用相应的action。

1.5引入NVelocity

如果像上面所说的,可以根据请求的不同执行相应的controller程序,那么关键就变成了如果将处理好的数据显示到相应的View中。这个问题我们可以借助于NVelocity这个模板引擎来解决。我们知道NVelocity可以将后台的数据以变量的形式存放到Velocity上下文中,在前台的模板中只需要读取相应的变量即可的到相应的数据。所以我们只要在cotroller的action中加载视图模板,存放组织好的数据,再在对应的视图模板中读取这些数据就可了。

上的四个个"引入"已经解决了我们提出的所有问题,其实也就是我们框架的大致思路,因此接下来就是具体实现了。

2.程序设计

2.1框架主程序

首先我们的给url以约定,我们上面已经说了,我们采用contro/action/parameter(parameter可以没有)的形式,例如http://127.0.0.1/Home/Index/1,这样这样的请求我们就可以得到Controller名字是Home,而Action名字是Index,参数是1。然后就是执行相应的Controller中的action程序。如何执行呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值