中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 其他
ASP.NET中基类页的设计和使用(1)
作者:jiyang 时间:2007-09-05 15:22 出处:yesky 责编:月夜寒箫
              摘要:ASP.NET中基类页的设计和使用(1)

在ASP.net业务系统的开发过程中,为了保证页面风格的一致性以及减少重复代码的编写,我们需要引入基类页的概念,即:定义一个基类页,让所有的页面都继承这个基类,并在该基类页中加入公用的属性和方法。

实际使用时,按照功能页面划分,可以定义多个基类页,如:

class FormBase

class BizFormBase : FormBase

class ViewFormBase : BizFormBase

class EditFormBase : BizFormBase

class QueryFormBase : FormBase

FormBase:基类页中的根,提供与业务无关的服务,如:URL重写,日志等。

BizFormBase:加入和业务相关的属性,如:该页面的当前业务对象ID等。

ViewFormBase:EditFormBase:实现具体的查看,编辑功能。

QueryFormBase:实现对通用查询页面的封装。

从面向对象的角度看,基类页与普通的基类,继承类设计其实区别并不大,都要在基类中编写公用的属性方法,并通过虚函数、事件等方式让继承类重写或响应。所不同的是基类页的设计过程受到所在环境的约束。在WinForm环境下,我们可以预先定义好窗体的公用元素,如工具条,默认的表格以及DataSource控件等。而到了Asp.net下的WebForm,则无法实现界面一级的继承,同时加入了状态管理等要求。

为了帮助大家理解,我们以查询基类页的设计过程来分析:

一个最简单的查询页面会包括三部分,多个查询条件文本框,查询按钮以及表格。同时查询页会和一个数据访问组件关联,当点查询时,会把查询条件转成where语句提交给数据访问组件。

            

QueryPeopleForm

OnQueryButtonClick()

{

 string peopleName = txtPeopleName.Text;

 string peopleAge = txtPeopleAge.Text;

 string sql;

 sql = string.Format(“Name Like‘%{0}%’and Age = {1}, PeopleName, peopleAge);

 PeopleManager manager = new PeopleManager();

 this.gridMain.DataSource = manager.GetDataTable(sql);

 this.gridMain.DataBind();

}

当点击查询按钮时,我们做了以下三件事:

1、获取查询条件

2、提交查询

3、将查询结果绑定到表格

这儿的提交查询和绑定在不同的查询页面都是一样的,于是我们首先把2,3放到基类页中,并提供这样一个方法:void QueryAndBind(IManager manager, string sql);这儿要定义IManager接口,让所有的Manager都实现该接口,这样基类页就无需知道具体的Manager,只要调用IManager.GetDataTable方法,然后绑定表格到即可。

使用基类页后的代码:

QueryPeopleForm : QueryFormBase

OnQueryButtonClick()

{

 string peopleName = txtPeopleName.Text;

 string peopleAge = txtPeopleAge.Text;

 sql = string.Format(“Name Like‘%{0}%’and Age = {1}, PeopleName, peopleAge);

 QueryAndBind(new PeopleManager(), sql);

}

这儿的代码少了,但仍有问题,当查询条件变化后,每次拼查询语句的工作即枯燥又容易出错,那么我们加入一个Query类,以简化这儿的操作:

            

public enum QueryOperator

{

 //等于比较。

 Equal = 0,

 // 不等于

 NotEqual = 1,

 // Like比较

 Like = 6

}

class Query

{

 void Add(string fieldName, string value, QueryOperator oper);

 string GetSql();

}

QueryPeopleForm : QueryFormBase

OnQueryButtonClick()

{

 Query query = new Query();

 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);

 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);

 QueryAndBind(new PeopleManager(), query.GetSql());

}

把拼Sql的工作放在Query类中做调用者只要声明查询字段,对应的值和比较类型即可。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有