如何避免重复代码
本文关键字:代码 何避免 | 更新日期: 2023-09-27 17:57:17
我对编程还很陌生,我注意到我在重复代码:
protected void FillTradeSetups()
{
DBUtil DB = new DBUtil();
DataTable dtTradeSetups;
dtTradeSetups = DB.GetTradeSetups();
ddlSetups.DataValueField = "tradeSetupId";
ddlSetups.DataSource = dtTradeSetups;
ddlSetups.DataBind();
}
protected void FillTimeFrames()
{
DBUtil DB = new DBUtil();
DataTable dtTimeFrames;
dtTimeFrames = DB.GetTimeFrames();
ddlTimeFrames.DataValueField = "tfCode";
ddlTimeFrames.DataSource = dtTimeFrames;
ddlTimeFrames.DataBind();
}
protected void FillTradeGrades()
{
DBUtil DB = new DBUtil();
DataTable dtTradeGrades;
dtTradeGrades = DB.GetTradeGrades();
ddlTradeGrades.DataValueField = "tradeGrade";
ddlTradeGrades.DataTextField = "descr";
ddlTradeGrades.DataSource = dtTradeGrades;
ddlTradeGrades.DataBind();
}
protected void FillExecutionGrades()
{
DBUtil DB = new DBUtil();
DataTable dtExecutionGrades;
dtExecutionGrades = DB.GetExecutionGrades();
ddlExecutionGrades.DataValueField = "executionGrade";
ddlExecutionGrades.DataTextField = "descr";
ddlExecutionGrades.DataSource = dtExecutionGrades;
ddlExecutionGrades.DataBind();
}
我怎样才能在这方面更聪明一点?你能帮我重写代码,这样它就不会重复那么多吗?
更新
哇,感谢您的回复,我想我会发布我正在考虑实施的内容。我还为自己创建了另一个小工人来删除其他一些丑陋的重复代码。对此,你怎么看?
void FillDropDownList(DropDownList ddl, DataTable dt, string dataValueField, string dataTextField, string defValue)
{
ddl.DataValueField = dataValueField;
ddl.DataSource = dt;
if (!string.IsNullOrEmpty(dataTextField))
{
ddl.DataTextField = dataTextField;
}
ddl.DataBind();
ddl.SelectedValue = defValue;
}
private string GetTradeItem(DataTable tradeDetails, string attribute)
{
return tradeDetails.Rows[0][attribute].ToString();
}
然后用类似这样的东西调用它:
int tradeId = int.Parse(Request.QueryString["tradeId"]);
DBUtil DB = new DBUtil();
DataTable tradeDetails = DB.GetTrade(tradeId);
FillDropDownList(ddlTradeGrades, DB.GetTradeGrades(), "tradeGrade", "descr", GetTradeItem(tradeDetails, "tradeGrade"));
当丑陋的东西变成更优雅的东西时,编码感觉很棒。
也许是
这样的东西?
void SetupDataSource(DropDownList ddl, DataTable dt, string dataValueFieldm, string dataTextField)
{
if (ddl != null)
{
ddl.DataValueField = dataValueField;
ddl.DataSource = dt;
if (!string.IsNullOrEmpty(dataTextField))
{
ddl.DataTextField = dataTextField;
}
ddl.DataBind();
}
else
{
throw new ArgumentNullException("ddl");
}
}
FWIW,可能是这样的:
void BindControl(DropDownList ddl, string valueField, string textField, DataTable data) {
ddl.DataValueField = valueField;
ddl.DataTextField = textField ?? valueField; // textField can be null
ddl.DataSource = data;
ddl.DataBind();
}
DBUtil DB = new DBUtil();
BindControl(ddlTradeGrades, "tradeGrade", "descr", DB.GetTradeGrades());
...
但是,该管道本身并不是非常复制的,应考虑将来的修改/维护的便利性。
快乐编码。
像这样的事情怎么样:
void FillData(DataTable dataSource, DropDownList ddl, string dataValueField, string dataTextField)
{
ddl.DataSource = dt;
ddl.DataValueField = dataValueField;
ddl.DataTextField = dataTextField;
ddl.DataBind();
}
然后你可以这样称呼它:
FillData(DB.GetTradeSetups(), ddlSetups, "tradeSetupId", string.Empty)
创建一个设置所需内容的方法:
void SetValues(DropDownList ddl, string datavalue, string text, object ds)
{
ddl.DataValueField = dataValue;
ddl.DataTextField = text;
ddl.DataSource = ds;
ddl.DataBind();
}
然后你可以用以下命令调用它:
SetValues(ddlTradeGrades, "tradeGrade", "descr", dtTradeGrades);
你可以做这样的事情:
private void BindMyLists()
{
DBUtil DB = new DBUtil();
BindDropDownList(this.ddlExecutionGrades, DB.GetExecutionGrades(), "executionGrade", "descr");
BindDropDownList(this.ddlTradeGrades, DB.GetTradeGrades(), "tradeGrade", "descr");
//etc
}
protected void BindDropDownList(DropDownList dropDownList, DataTable dataTable, string dataValueField, string dataTextField)
{
dropDownList.DataValueField = dataValueField;
dropDownList.DataTextField = dataTextField;
dropDownList.DataSource = dataTable;
dropDownList.DataBind();
}
请参阅需要通用实用程序 C# 方法来填充 ASP.NET
可能是这样的...
protected void FillDdl(DropDownList ddl, string dataValueField, Func<DataTable> dataTableMethod)
{
FillDdl(ddl, dataValueField, null, dataTableMethod);
}
protected void FillDdl(DropDownList ddl, string dataValueField, string dataTextField, Func<DataTable> dataTableMethod)
{
DataTable dt = dataTableMethod();
ddl.DataSource = dt;
ddl.DataValueField = dataValueField;
ddl.DataTextField = dataTextField ?? dataValueField;
ddl.DataBind();
}
然后像这样直接打电话
DBUtil DB = new DBUtil();
FillDdl(ddlSetups, "tradeSetupId", DB.GetTradeSetups);
FillDdl(ddlTimeFrames, "tfCode", DB.GetTimeFrames);
FillDdl(ddlTradeGrades, "tradeGrade", "descr", DB.GetTradeGrades);
FillDdl(ddlExecutionGrades, "executionGrade", "descr", DB.GetExecutionGrades);
或者你仍然可以有瘦个人方法
protected void FillTradeSetups()
{
DBUtil DB = new DBUtil();
FillDdl(ddlSetups, "tradeSetupId", DB.GetTradeSetups);
}
protected void FillTimeFrames()
{
DBUtil DB = new DBUtil();
FillDdl(ddlTimeFrames, "tfCode", DB.GetTimeFrames);
}
protected void FillTradeGrades()
{
DBUtil DB = new DBUtil();
FillDdl(ddlTradeGrades, "tradeGrade", "descr", DB.GetTradeGrades);
}
protected void FillExecutionGrades()
{
DBUtil DB = new DBUtil();
FillDdl(ddlExecutionGrades, "executionGrade", "descr", DB.GetExecutionGrades);
}