自制MVC框架原理介绍

  当初用jsp开发程序时,因为很多东西写在一起混淆的,项目做大或者变更的时候就会很吃力,联动性太大,有时修改视图的东西都可能会影响业务逻辑,分层不明确。

  后来听说了Struts
MVC,做过几个示例,层次倒是分清了,每个actionbean或者interceptor都得配置映射,配置弄来弄去很麻烦,当然用配置的方式的话灵活性扩展性会好很多,但做起来实太吃力。再后来看到了Spring
MVC 它可以省去很多配置,可以使用注解的方式去直接写在程序了,实现了零配置。

  在dotnet方面原来一直没有mvc这个概念只有webform,webform相对入门简单,但要更高级的入门感觉没那么简单,而且webform不适合做web
app。后来看到了MonoRail
MVC,于是研究了一翻以后,决定自己弄一个适合自己的MVC框架,于是乎便产生了我自己的MVC,我命名是Stephen.View
其实名字叫Stephen.MVC更好些,但后来一直没改,那就一直保持这个名字了。若干年后微软也出了MVC,现在都已经有好几个版本了。没去研究过这个东东,项目中还是用我自制的这个框架。接下来说说我的框架实现原理:

通过在web.config中
       
<httpHandlers>

<add verb="*" path="*.aspx"
type="Stephen.View.TemplateHandle,Stephen.View"/>

</httpHandlers>

拦截扩展名为.aspx的请求,让Stephen.View.TemplateHandle(实现IhttpHandlerFactory接口的类)处理http请求,处理方式有以下几步:

1.是否有url重写(可在web.config中写入配置),有的话根据配置后执行真实的处理url,没有的话就跳过。

Web.config配置方式为:
<configuration>

<configSections>

<section
name="RewriterConfig"
type="Stephen.View.UrlConfig.RewriterConfigSerializerSectionHandler,
Stephen.View"/>

</configSections>

<RewriterConfig>

<Rules>

<RewriterRule>

<LookFor>~/article/cat/(\d+).aspx</LookFor>

<SendTo>~/integration/info/CommonManageList_.aspx?ClassID=$1</SendTo>

</RewriterRule>

</Rules>

</RewriterConfig>

<connectionStrings>

url重写可参考:http://www.cnblogs.com/netcorner/archive/2009/12/10/2912045.html

2.通过真实的url地址配置需调用哪个控制器(可通过web.config中配置控制组件前缀包名,默认控制层名字为Netcorner.Controllers)

<appSettings>

<add key="Controller" value="Netcorner.Controllers"/>

</appSettings>

注:控制层的方法默认是不具有session会话的,如需要会话的话控制层方法必须加入HasSessionAttribute
特性。

在调用控制层方法之前,会向控制层方法传递一个Hashtable对象,该对象存放了分别是当前应用路径(key=applicationPath),当前路径地址(currentFilePath),视图应用处理包(key=Tools,视图处理包可通过配置映射哪个处理包,默认就是Stephen.View.ViewUtility类)

3.调用控制器执行方法

控制器其实就是一个简单的C#类,如:

namespace Netcorner.Controllers.integration

{

public class User

{

public virtual
IDictionary ManageList(IDictionary context)

{

...

}

}

}

当执行/integration/user/managelist.aspx时就会执行User类中ManageList方法,context参数是从Stephen.View.TemplateHandle得到的。

控制器的写法可有多种方式:

1).采用直接在方法体里面写代码

2).是写插件(我这里把C#特性叫做插件了,这些插件把一些常见的业务封装起来了,直接可以拿来调用)的方式。每个插件必须实现BeforehandCommonAttribute或ProceedPlugin抽象类。工作方式可参见后面章节。

3).通过配置的动态拦截器。拦截器必须实现AspectInterceptor抽象类,工作方式可参见后面章节。

4).控制器方法处理完成返回相应的值.

不同类型调用的方式不一样

(1).返回Hashtable时

调用视图模板。这里我处理的模板引擎用了nvelocity。语法参见:http://www.cnblogs.com/netcorner/archive/2008/07/11/2912125.html

(2).其它类型时,则以字符串形式直接展现不需要模板。

  控制层的访问类是通过url传递的,在根目录的话执行的类名必须是Default,其它的话就会根据包名和类名相匹配找到相应类下面相应方法。比如:/integration/user/login.aspx
它实际是访问Netconer.Controllers.integration(我这里使用默认设定的控制器)包下的login方法

演示示例:http://files.cnblogs.com/netcorner/%E7%A4%BA%E4%BE%8B1.rar

接下来我会讲一下插件及拦截器原理及开发方法。

时间: 2024-10-14 04:36:25

自制MVC框架原理介绍的相关文章

自制MVC框架CRUD操作、列表、分页显示插件介绍

这里涉及到的操作都是引用自Stephen.DALService数据层.数据访问层实现方式在后文中我会仔细的说明,先说明一下数据操作集成的插件. 1).InsertAttribute 用于插入记录. 状态返回值:假定hashtable传递变量名的是context ,那么返回值可通过context[InsertAttribute.ValueKey]得到,推荐返回的是插入的主键ID值,当然这个是由数据层设定的. 有以下属性可进行设置: 属性名 作用 默认值 选项说明 其它说明 Key 映射路径.格式如

自制MVC之工具类插件一

1).BreakRomoteURLAttribute 提交或交互的URL数据是否来源于其它地方,站内提交,防止跨站 2). DataAttribute 取得post或get提交的数据.如果没有特殊设置,取得的数据是sql注入.xss注入过滤的. 属性名 作用 默认值 选项说明 其它说明 IsEmpty 是否可以提交空数据,就是表单数值一个都没有的情况. true 必填 AspectPriority 插件执行优先级 空 可选 MD5Key 需md5加密的key,多个用逗号分隔. 10000 可选

自制MVC框架的插件与拦截器基础

上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以下抽象类来实现插件或者拦截器. 1. AspectInterceptor抽象类 处理动态织入的AOP拦截器,Stephen.View框架中的拦截器抽象类,所有需要动态拦截器必须实现该类,该拦截器原理是通过aspectsharp实现的.该拦截器适用于控制层的拦截,且要使控制器类支持动态拦截必须给控制器加上DynamicAttribut

beego的MVC架构介绍

beego 的 MVC 架构介绍 beego 是一个典型的 MVC 框架,它的整个执行逻辑如下图所示: 通过文字来描述如下: 在监听的端口接收数据,默认监听在 8080 端口. 用户请求到达 8080 端口之后进入 beego 的处理逻辑. 初始化 Context 对象,根据请求判断是否为 WebSocket 请求,如果是的话设置 Input,同时判断请求的方法是否在标准请求方法中(“get“”post“”put“”delete“”patch“”options“”head“),防止用户的恶意伪造

ASP.NET MVC 入门介绍 (上)

1. MVC模式 MVC模式是一种软件架构模式.它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller).MVC模式最早由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发 明的一种软件设计模式.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此 模式通过对复杂度的简化,使程序结构更加直观.软件

ASP.NET Core MVC 过滤器介绍

原文:ASP.NET Core MVC 过滤器介绍 过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Action 调用管道中运行,有时称为过滤器管道.MVC选择要执行的Action方法后,才会执行过滤器管道: 实现 过滤器同时支持同步和异步两种不同的接口定义.您可以根据执行的任务类型,选择同步或异步实现. 同步过滤器定义OnStageExecutin

PHP 的 MVC 框架原理及常见框架学习

在PHP开发中,选择合适的框架有助于加快软件开发速度,节省宝贵的项目时间,并允许开发人员专注于功能的实现. 换句话说,流行的 PHP 框架有助于加速应用程序开发(RAD)的过程.这些 Web 框架提供了开发的基本结构,随后可以快速进行开发任务,整个开发过程稳定,并且采用标准流程进行,方便开发团队内部快速达成契约. 市面上开源框架有几十种,如何快速学习框架? 现在大部分框架都是基于 MVC 模式,所以了解 MVC 框架原理,可以快速入手应用开发. 一.MVC 框架是什么? MVC 全名是 Mode

Castle.MVC框架介绍

Castle.MVC目前还在Castle的Sandbox中,只是在源代码管理中有,还没有向外发布版本,这里介绍多时Web的MVC,和Castle的MonoRail相比较,这个MVC可以Asp.Net的事件驱动开发和WebControl所见及所得的开发模式.对Castle.MVC做一下分解,其构成主要有: View――这个就不多做解释了,页面的CS类如果要实现其导航功能,就继承此类,Castle.MVC提供了3种View:WebFormView:继承Page类和IView接口,所有的Web 页面继

1.Angular框架-angular介绍与基本使用,MVC模式介绍

1.1. AngularJS概述 1.1.1. 介绍 简称:ng Angular是一个MVC框架 AngularJS 诞生于2009年,由 Misko Hevery 等人创建,后为Google所收购. 是一款优秀的前端JS框架,已经被用于Google的多款产品当中. AngularJS有着诸多特性,最为核心的是: MVC.模块化(编程).自动化双向数据绑定.语义化标签.指令.依赖注入等等. 其他前端框架: VueJS . Avalon . React . BackBone . KnockoutJ