欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

秋色园QBlog技术原理解析:Module之页面基类设计(五)

程序员文章站 2022-03-20 16:55:46
文章转载自:http://www.pythonheidong.com/blog/article/3046/ 文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3 ......

文章转载自:

文章回顾:

ps:秋色园qblog下载地址:

 

本节,将为大伙介绍如何设计一个页面的基类,同时为你解析秋色园qblog的基类设计方案。

 

一:传统webform页面page基类

 

传统的页面基类,基本继承自system.web.ui.page,如:

///
/// 共用页面基类
///
public class pagebase : system.web.ui.page
{}

如此继承的原因?

1:为了处理某些共同逻辑、减化代码、统一处理某些事情所需。

2:基于开发中,要用到很多用户控件、viewstate等,享受丰富的服务端控件带来的开发优势,提高开发效率。

3:早已习惯webform开发,虽然最近mvc流行。

我在一些内部系统或站点管理后台上,也经常使用,如我用它来处理以下内容:

1:用户权限

2:常见方法封装,包括服务端方法、脚本方法。

3:列表控件repeater/datalist/gridview的进一步控制:如:光棒效果[就是移动时行的高亮显示]、列头翻译,列的隐藏控制等。

4:其它......

再简单看一下system.web.ui.page,发现如下的继承:

public class page : templatecontrol, ihttphandler
{
// 摘要:
// 一个定义呈现的页中的 eventargument 隐藏字段的字符串。
[editorbrowsable(1)]
public const string posteventargumentid = "__eventargument";
//
// 摘要:
// 一个定义呈现的页中的 eventtarget 隐藏字段的字符串。
[editorbrowsable(1)]
public const string posteventsourceid = "__eventtarget";

// 摘要:
// 初始化 system.web.ui.page 类的新实例。
public page();

//省略n行...

}

简说:

为了实现和丰富的服务端控件打交道,继承了templatecontrol这个丰富的控件基类,同时引入的viewstate。方便的同时,也被世人所鄙视,甚至把网站运行慢的原因,都推到viewstate身上。

 

保守估计也许可能应该或许有部分人群,使用mvc的原因,仅为mvc没viewstate而已,和干净点的html生成

举个小例子:

很多人看到秋色园qblog的站点,点击看html源代码,在干炼的html中寻不到viewstate的影子时,

就发电来问:

是不是mvc开发的?

呀的~没有viewstate的就是mvc?

没有viewstate的,不一定是mvc,可能正如你这样处理:

1:输出前截断输出,对html进行替换处理后,再输出干净的html

2:利用1的方法,把输出的html保存成文件

3:请求中可以缓存html或直接请求html

 

秋色园不是mvc,何以生成的html没有viewstate,输出前替换了viewstate?答案:no。

 

 

二:之基类设计

 

的基类设计,仅是退一步而已,和system.web.ui.page一样,继承自:ihttphandler。

如:

public abstract class httpcustom : ihttphandler
{}

 

以下内容:

将接第三节url重定向到default.aspx的示例继续补充,给大伙解析基类的设计:

 

1:新建类库,为了自己好找,名字还以urlrewrite开头了,叫:urlrewritemodule

 

2:把class1.cs更名为httpcustom,并继承自ihttphandler,如下图:

秋色园QBlog技术原理解析:Module之页面基类设计(五)

正如上图你看到的,截图时类少写了一个关键字:abstract,哈哈~

 

3:创建自己的页面生存周期方法,大体如下:

秋色园QBlog技术原理解析:Module之页面基类设计(五)

说明:

从上面的示例中,我们创建了属于自己的页面生存周期,把那个经常属于面试题的page的页面生存周期都仍一边去。

 

4:接下来,再做点事,把重点引到ashx处理程序中,并抛弃aspx

 

4.1:在原来的站点urlrewritedemo中添加对项目urlrewritemodule的引用

4.2:添加default.ashx处理程序,继承自httpcustom,并重写page_load方法:

秋色园QBlog技术原理解析:Module之页面基类设计(五)

4.3:把urlrewrite库的重定位,从之前的定位到defaut.aspx改成default.ashx

 

5:一切就绪,f5运行看效果

秋色园QBlog技术原理解析:Module之页面基类设计(五)

再来一张:

秋色园QBlog技术原理解析:Module之页面基类设计(五)

经过上面的一折腾:

我们实现了属于自己的页面生存周期,并以比较让人熟悉的page_load方法,分给各个ashx处理程序,当然,基类要做的事情,还有好多,比较好多方法都是private,说明要自己处理,后节待续。

 

总结:

本节就到这里结束了,从本节中看出,秋色园qblog()在设计中,抛弃了传统的page及它所有的用户控件,开创了自己的生命周期。

然而,当asp.net没有aspx、ascx之后,如何开创新的开发流程?页面如何加载与呈现?如何触发事件请求?

下节将为你解析,敬请关注。

 

最后是本节示例下载:秋色园QBlog技术原理解析:Module之页面基类设计(五) urlrewritemodule.rar

文章转载自: