【问题标题】:How to refactor the code so one method for the two web forms如何将代码重构为两种 Web 表单的一种方法
【发布时间】:2016-02-16 11:21:17
【问题描述】:
如果我有两个这样的网络表单:
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);
}
如何重构我的代码,以便我对两个页面都有一种方法?
【问题讨论】:
标签:
c#
asp.net
design-patterns
webforms
refactoring
【解决方案1】:
您可以编写一个继承自 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()。
然后你在一个地方定义了你的代码。
【解决方案2】:
昨天编辑了@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);