ASP.NET中基类页的设计和使用
2007-08-27 20:49
330 查看
这儿的代码少了,但仍有问题,当查询条件变化后,每次拼查询语句的工作即枯燥又容易出错,那么我们加入一个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类中做,调用者只要声明查询字段,对应的值,和比较类型即可。
到这一步,我们的基类页已经很好用了,但还有一个小问题,也就是前面说的,在WebForm中无法实现界面级的继承,那么基类页的QueryAndBind方法,将无法知道查询结果要绑定到哪一个表格,这时我们的做法是在基类页中声明DefaultGrid属性,让继承页来告知当前的表格控件。
修改后的代码:
QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
InitControls(gridMain);
Query query = new Query();
query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
QueryAndBind(new PeopleManager(), query.GetSql());
}
至此,基类页的功能已经完整了,但仍然不够,如果我们以后想改变查询按钮点击的行为,比如查询结果为空时,要弹出对话框提示,这时仍然要到处修改页面代码,这不是我们所希望的,于是我们将QueryButton的OnClick操作也放在基类页了中执行,继承页只要初始化数据访问组件和设置查询条件即可。
QueryPeopleForm : QueryFormBase
void Initialize()
{
// 指定页面对应的Manager
Manager = new PeopleManager();
// 绑定控件
InitControls(gridMain, btnQuery);
}
void GetQueryInfo(Query query)
{
//获得查询条件
query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
}
QueryFormBase:
private IManager manager = null;
public IManager Manager
{
get { return manager; }
set { manager = value; }
}
void InitControls(GridView grid, Button queryButton)
{
this.defaultGrid = grid;
this.queryButton = queryButton;
queryButton.Click += new EventHandler(QueryButton_Click);
}
void QueryButton_Click(object sender, EventArgs e)
{
Query query = new Query();
GetQueryInfo(Query);
QueryAndBind(manager, query.GetSql());
}
总的代码可以从附件中下载,大家可以加入断点,看看基类,继承类页的代码执行顺序。
应该说基类的设计相对复杂,但好处是继承页的代码变得清楚了,没有多余重复的代码。
而基类页的设计其实是有技巧的,总结起来有以下几条:
1、首先以最直接的方式写出页面代码
2、提取公用方法和添加辅助类
3、提取事件处理流程到基类页中
4、在基类页中设计需要继承页重载的方法与事件
从设计上来讲,用基类页的方式来统一操作、简化页面代码是一种非常直观的方式,缺点是随着项目的演化,基类页会变得大而全,不容易被新的项目重用,这时我们就可以考虑把其中的一部分功能放到用户控件和自定义组件中来实现,以减少耦合性和提高重用性。
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类中做,调用者只要声明查询字段,对应的值,和比较类型即可。
到这一步,我们的基类页已经很好用了,但还有一个小问题,也就是前面说的,在WebForm中无法实现界面级的继承,那么基类页的QueryAndBind方法,将无法知道查询结果要绑定到哪一个表格,这时我们的做法是在基类页中声明DefaultGrid属性,让继承页来告知当前的表格控件。
修改后的代码:
QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
InitControls(gridMain);
Query query = new Query();
query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
QueryAndBind(new PeopleManager(), query.GetSql());
}
至此,基类页的功能已经完整了,但仍然不够,如果我们以后想改变查询按钮点击的行为,比如查询结果为空时,要弹出对话框提示,这时仍然要到处修改页面代码,这不是我们所希望的,于是我们将QueryButton的OnClick操作也放在基类页了中执行,继承页只要初始化数据访问组件和设置查询条件即可。
QueryPeopleForm : QueryFormBase
void Initialize()
{
// 指定页面对应的Manager
Manager = new PeopleManager();
// 绑定控件
InitControls(gridMain, btnQuery);
}
void GetQueryInfo(Query query)
{
//获得查询条件
query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
}
QueryFormBase:
private IManager manager = null;
public IManager Manager
{
get { return manager; }
set { manager = value; }
}
void InitControls(GridView grid, Button queryButton)
{
this.defaultGrid = grid;
this.queryButton = queryButton;
queryButton.Click += new EventHandler(QueryButton_Click);
}
void QueryButton_Click(object sender, EventArgs e)
{
Query query = new Query();
GetQueryInfo(Query);
QueryAndBind(manager, query.GetSql());
}
总的代码可以从附件中下载,大家可以加入断点,看看基类,继承类页的代码执行顺序。
应该说基类的设计相对复杂,但好处是继承页的代码变得清楚了,没有多余重复的代码。
而基类页的设计其实是有技巧的,总结起来有以下几条:
1、首先以最直接的方式写出页面代码
2、提取公用方法和添加辅助类
3、提取事件处理流程到基类页中
4、在基类页中设计需要继承页重载的方法与事件
从设计上来讲,用基类页的方式来统一操作、简化页面代码是一种非常直观的方式,缺点是随着项目的演化,基类页会变得大而全,不容易被新的项目重用,这时我们就可以考虑把其中的一部分功能放到用户控件和自定义组件中来实现,以减少耦合性和提高重用性。
相关文章推荐
- ASP.NET中基类页的设计和使用
- ASP.NET中基类页的设计和使用收藏
- ASP.NET中基类页的设计和使用
- asp.net 基类页的设计和使用
- ASP.NET中基类页的设计和使用
- Asp.net中基类页的设计和使用
- Asp.net中基类页的设计和使用
- Asp.net中基类页的设计和使用
- Asp.net中基类页的使用和设计
- ASP.NET中基类页的设计和使用
- ASP.NET中基类页的设计和使用
- ASP.NET中基类页的设计和使用
- (转)ASP.NET中基类页的设计和使用
- ASP.NET中基类页的设计和使用
- (转)Asp.net中基类页的设计和使用
- 使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- 说一说我看了蒋老师的"使用ASP.NET从零开始制作设计网站"后的感悟
- ASP.NET网站权限设计实现(一)——使用PowerDesigner进行数据库设计
- ASP & ASP.NET 网站性能设计之Cache动态使用