使用DataSource和DataBinding重构代码
本文关键字:重构 代码 DataBinding DataSource 使用 | 更新日期: 2023-09-27 18:26:57
我有一个简单的应用程序,它正在检查员工职位,然后它根据一些业务规则返回带有信息的html表(实际上我使用了repeater而不是html表)。一切都很容易,但后来我有了一个想法,如果员工在公司有两个职位,我需要返回html表,其中包含根据这两个职位的信息。现在我有位置列表listPositions
,它可能包含超过1个位置。我的代码(业务逻辑)看起来是这样的:
Dictionary<string, Action> actions = new Dictionary<string, Action>()
{
{"Admin", new Action(() =>
{rptEmployees.DataSource = spc.GetEmployeeInfo(Models.PhoneNumbers.AllEmployee);
rptEmployees.DataBind();} ) },
{"OfficeDirector", new Action(() =>
{rptEmployees.DataSource = spc.GetEmployeeInfo(Models.PhoneNumbers.OfficeEmployee);
rptEmployees.DataBind();})},
{"RegularUser", new Action(() =>
{rptEmployees.DataSource = spc.GetEmployeeInfo(Models.PhoneNumbers.OfficeDepartmentEmployee);
rptEmployees.DataBind();})}
};
我的方法GetemployeeInfo()
是将SPListItemCollection
作为参数,并返回EmployeeInfo对象,我将其绑定到rptEmployees
repeatar。
我认为其余的代码(业务逻辑)应该是这样的:
foreach (var position in listPositions)
{
if (actions.ContainsKey(position))
{
actions[position]();
}
}
但这是一个明显的错误,因为当列表中有一个以上的位置时,这部分代码首先将repeater
与第一个位置的信息绑定,第二次绑定后,这些信息就会丢失。在不更改Dictionary
段中的代码的情况下,是否有可能重构业务逻辑并获得这两个位置的信息?还是我应该尝试不同的方法?非常感谢。
我找到了解决问题的方法:)这真的很简单。首先,我创建了列表List<Models.EmployeeInfo> Employees
然后简单修改以前的代码:
Dictionary<string, Action> actions = new Dictionary<string, Action>()
{
{"RegularUser", new Action(() => { Employees.AddRange(spc.GetEmployeeInfo(Models.PhoneNumbers.OfficeDepartmentEmployee));})},
{"DeliveryManager", new Action(() => {Employees.AddRange(spc.GetEmployeeInfo(Models.PhoneNumbers.OfficeDepartmentEmployee));})},
{"OfficeDirector", new Action(() => {Employees.AddRange(spc.GetEmployeeInfo(Models.PhoneNumbers.OfficeEmployee));})},
{"Admin", new Action(() => {Employees.AddRange(spc.GetEmployeeInfo(Models.PhoneNumbers.AllEmployee));})}
};
foreach (var position in listPositions)
{
if (actions.ContainsKey(position))
{
actions[position]();
}
}
rptEmployees.DataSource = Employees;
rptEmployees.DataBind();