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

简介:

文章回顾:

复制代码

1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用

2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程

3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL

4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序

复制代码

ps:秋色园QBlog下载地址:http://www.cyqdata.com/download/article-detail-427

 

本节,将为大伙介绍如何设计一个页面的基类,同时为你解析秋色园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,如下图:

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

 

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

说明:

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

 

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

 

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

4.2:添加Default.ashx处理程序,继承自HttpCustom,并重写Page_Load方法:

4.3:把UrlRewrite库的重定位,从之前的定位到Defaut.aspx改成Default.ashx

 

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

再来一张:

经过上面的一折腾:

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

 

总结:

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

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

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

 

最后是本节示例下载: UrlRewriteModule.rar

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/02/24/1963621.html

相关文章
|
7月前
|
人工智能 语音技术
首个可保留情感的音频LLM!Meta重磅开源7B-Spirit LM,一网打尽音频+文本多模态任务
Meta AI 研究团队提出了一种名为 SpiRit-LM 的新型多模态语言模型,该模型能够处理文本和音频,实现两者无缝融合。SpiRit-LM 通过“交织”方法训练,具备多模态融合、情感保留和多任务学习能力,在自动语音识别、文本转语音等任务上表现出色。它有 Base 和 Expressive 两个版本,后者能更好地捕捉情感表达。研究团队在多个基准上测试了其性能,并探索了其在语音助手、内容创作、教育和音频编辑等领域的应用前景。
199 1
|
9月前
|
人工智能 自然语言处理 监控
PMP认证有哪些要求:干货分享
本文详细介绍PMP的报考要求、考试内容与形式、认证有效期及价值,以及备考策略和推荐的学习工具,帮助考生高效准备。
325 2
|
10月前
|
安全 数据中心
数据中心服务器机架是什么
数据中心服务器机架是用于容纳服务器、存储器等IT设备的结构,旨在提升数据中心的管理与运营效率。常见的类型包括开放式机架、封闭式机柜和壁挂式机架,每种类型各有特点,适用于不同的场景需求。选择时需考虑尺寸、承重、冷却效率及安全性等因素,以确保最佳的使用效果。
650 4
|
11月前
|
物联网
物联网卡不能更换地区使用吗
物联网卡(IoT SIM卡)是否能更换地区使用,主要取决于几个关键因素,包括物联网服务提供商的政策、物联网卡的类型(如预付费、后付费)、网络覆盖范围、以及是否存在地理限制等。以下是一些常见的考虑点和操作步骤:
|
12月前
|
人工智能 大数据 区块链
|
监控 关系型数据库 MySQL
zabbix 简单介绍 及部署
zabbix 简单介绍 及部署
|
存储 弹性计算 固态存储
阿里云服务器4核32G配置多少钱?我们应该如何选择?
阿里云服务器4核32G配置有多达十几种实例规格可选,不同实例规格的收费标准不一样,本文介绍了4核32G配置可选实例规格和最新收费标准及活动价格,可供大家了解阿里云服务器4核32G配置多少钱以及选择建议。
阿里云服务器4核32G配置多少钱?我们应该如何选择?
|
NoSQL Cloud Native 关系型数据库
阿里云数据库有哪些?主要用于哪些使用场景?
阿里云数据库有哪些?主要用于哪些使用场景?
809 0
|
网络协议 网络架构
|
达摩院 计算机视觉
给语言大模型加上综合视听能力,达摩院开源Video-LLaMA
给语言大模型加上综合视听能力,达摩院开源Video-LLaMA
614 0