ASP.net 中的页面继承实现和通用页面的工厂模式的实现

最近用 .Net 做 web 项目的时候遇到了一些问题,就是很多的页面的处理一样的,不一样的就是我们写的存储过程不同,为了考虑代码的重复利用和可维护性和可

扩展性,于是写了一个对于单据页面的工厂模式,采用界面的继承技术,因为我们写的 ASP.net 页面的是代码后置的,所以我们继承的时候就继承我们的后置的代码,也就是我们说的 XXXX.aspx.cs 文件。其实页面的继承和我们普通的类继承一样,只是 ASP.net 页面的界面是 HTML 和后置代码共同组成的,所以也有一些不同,好了先进开始我们的 ASP.net 页面继承之旅:

我在这里总结了一幅在 .net 环境下用 Rational XDE 生成的 UML 图给大家一个直观感性的认识,我先来讲解一些这副图中的类和它们的关系, BillFactory 类是我定义的单据工厂它来识别产生那种单据, VirturBillCOM 是一个虚拟类(也可以是接口)它定义了一些方法让继承它的类来实现, IssueBillMng_Frm 和 IssueBill_Frm 是页面的后置代码类,负责页面的一些操作比如,按钮状态,调用业务逻辑等, BillInstorageMngList 和 IssueBillMng 分别继承 VirturBillCom 虚拟类来实现业务处理调用数据存储层等, BillInstorageMngList 负责入库单的处理, IssueBillMng 负责出库单的处理。 BillEntity 和 BillItemEntity 是数据库映射的实体类。 BillInstorageMng 继承了页面类 IssueBillMng_Frm , BillInstorage 继承类页面类 IssueBill_Frm, 大家可以看到, BillInstorageMng 类和 BillInstorage 类由于继承类页面类,所以他们的类中只有一个空的构造函数,其他的都可以由它的父类处理,在这里大家可能要问,这样就可以完成页面的继承了吗?,呵呵,这只是其中的一步,为了达到和父类的页面显示同样的效果,必须把父类中的 HTML 拷贝到子类的 HTML 中,这样界面的显示一样了(如果你要改动一下界面可以在子类界面的 HTML 中改动添加按钮等),但是有个问题是,在 .net 设计器中拷贝 HTML 到子类的页面时,进入该子页面的后置代码的时候会自动的添加页面上的服务器控件在变量声明的地方,我们可以想象,这些控件在父类已经存在了而且默认为保护类型为 protected 所以子类也可以看到,所以控件就会重复,就很出错的,必须在子类中把父类已经用的控件变量删除掉,如果子类自己想有其他的操作可以自己加入控件,但变量不能和父类重复。这样很简单就完成了页面的继承,大家可以试试,它可以减少很多的重复的代码。

还有就是我想说的就是 BillInstorageMngList 类和 IssueBillMng 类,他们都继承 VirturBillCom 实现了 VirturBillCom 定义的函数,他们是中间层,所以我们在页面中调用的时候可以直接调用 VirturBillCOM ,具体真正的实现哪个实例由 BillFactory 来实现,这样可能还有不明白的,具体的说在 IssueBillMng_Frm 的构造函数中(页面的构造函数默认是没有的,我们的自己加)声明一个 VirturBillCOM 的实例如: mgrObr = BillFactory ( this ) ; 用工厂来判断实例那个中间层变量来完成不同的工作。这就是简单工厂模式,大家有不明白的可以看看设计模式。好了今天就说到这,有什么不明白的可以在探讨,虽然我的表达可能有些地方不太清楚,大家可以好好看看这副图,是典型的工厂模式图,好啦该下班回家了。祝大家晚间愉快。

![](http://dev.csdn.net/article/24/C:/Documents and Settings\gewj\桌面\绘图1.jpg)

Published At
Categories with Web编程
Tagged with
comments powered by Disqus