如何重构代码,以便为两个 Web 表单使用一种方法
本文关键字:表单 Web 两个 一种 方法 重构 何重构 代码 | 更新日期: 2023-09-27 18:34:44
如果我有两个这样的网络表单:
public partial class frm_createVac : System.Web.UI.Page
public partial class frm_editVac : System.Web.UI.Page
并且两个页面具有以下相同的方法:
private void FillVacations()
{
DataTable dt = DAL.Vacation.GetVacationTypes();
ddl_vac_type.Items.Clear();
ddl_vac_type.DataSource = dt;
ddl_vac_type.DataTextField = "vac_name";
ddl_vac_type.DataValueField = "vac_code";
ddl_vac_type.DataBind();
ListItem item = new ListItem("-SELECT-", "-1");
ddl_vac_type.Items.Insert(0, item);
}
如何重构我的代码,以便我对两个页面都有一个方法?
你可以编写一个从 System.Web.UI.Page 继承的超类,然后让你的类从该超类继承。然后,在超类中定义方法并在子类中使用它:
public partial class Vacationpage: System.Web.UI.Page
{
//define atttributes
public Vacationpage()
{
}
private void FillVacations()
{
DataTable dt = DAL.Vacation.GetVacationTypes();
ddl_vac_type.Items.Clear();
ddl_vac_type.DataSource = dt;
ddl_vac_type.DataTextField = "vac_name";
ddl_vac_type.DataValueField = "vac_code";
ddl_vac_type.DataBind();
ListItem item = new ListItem("-SELECT-", "-1");
ddl_vac_type.Items.Insert(0, item);
}
}
然后你这样做:
public partial class frm_createVac : Vacationpage
public partial class frm_editVac : Vacationpage
在这些类中,您可以使用 FillVacations((。然后,您将代码定义在一个位置。
昨天编辑@StarterPack错误输入答案,我再次查看了您的问题,并意识到在您的情况下更好的选择是辅助方法,而不是依赖标记或控件 ID。假设您使用的是DropDownList,它将是
public class VacationHelper
{
public static void FillVacations(System.Web.UI.WebControls.DropDownList ddl)
{
DataTable dt = DAL.Vacation.GetVacationTypes();
ddl.Items.Clear();
ddl.DataSource = dt;
ddl.DataTextField = "vac_name";
ddl.DataValueField = "vac_code";
ddl.DataBind();
ListItem item = new ListItem("-SELECT-", "-1");
ddl.Items.Insert(0, item);
}
}
并在每个页面上调用它
VacationHelper.FillVacations(ddl_vac_type);