当前位置:编程学习 > C#/ASP.NET >>

一次重构导向设计模式的实践(.NET)

代码仅仅是说明问题,和实际的有所不同
在项目开发过程中,有这样的需求:定义一个查询窗体使用DataGrid显示列表
双击Grid后打开指定记录的编辑页面,窗体类为FormSearchEntity于是这么写了
private void Grid_DoubleClick(object sender,System.EventArgs e)
{
string entityID = 双击记录的ID字段值; //这个有固定的办法
FormEntity frmEntity = new FormEntity(entityID);
........
frmEntity.Show();
}
其中的FormEntity就是对业务实体的编辑界面,在构造函数中传入一个ID,然后
加载该记录的相关数据,在这里不作重点解释。
接下来有要在查询界面上添加一个按钮“Go”,执行的动作和Grid双击是一样的,就是
在Grid中选中记录,点击Go打开实体的操作界面。
这样,就使用重构中的Extract Method手法:
private void Grid_DoubleClick(object sender,System.EventArgs e)
{
string entityID = 双击记录的ID字段值;
OpenEntityForm(entityID);

}
private void btnGo_Click(object sender,System.EventArgs e )
{
string entityID = 双击记录的ID字段值;
OpenEntityForm(entityID);
}
private void OpenEntityForm(string entityID)
{
FormEntity frmEntity = new FormEntity(entityID);
........
frmEntity.Show();
}
到现在看来,这样作有什么用呢?直接在Go的Click时间中调用Grid的DoubleClick不就行了吗?事实上Extract Method不仅仅是防止重复代码
同时也可以提高代码的可重用性,作用在下面会看到。
现在,又要对另一个的表进行同样的操作,那就再定义一个窗体,把上面的代码改改就成了,但是就出现了重复代码,这是不好的味道。那么这样作:把OpenEntityForm方法改为Virtual,同时声明为Protected,里面的代码都去掉
补充:asp.net教程,基础入门 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,