实际使用时,按照功能页面划分,可以定义多个基类页,如:
class FormBase
class BizFormBase :FormBase
class ViewFormBase : BizFormBase
class EditFormBase : BizFormBase
class QueryFormBase : FormBase
BizFormBase:加入和业务相关的属性,如:该页面的当前业务对象ID等。
ViewFormBase,:EditFormBase:实现具体的查看,编辑功能。
QueryFormBase:实现对通用查询页面的封装。
为了帮助大家理解,我们以查询基类页的设计过程来分析:
一个最简单的查询页面会包括三部分,多个查询条件文本框,查询按钮,以及表格。同时查询页会和一个数据访问组件关联,当点查询时,会把查询条件转成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);
}