使用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段中的代码的情况下,是否有可能重构业务逻辑并获得这两个位置的信息?还是我应该尝试不同的方法?非常感谢。

使用DataSource和DataBinding重构代码

我找到了解决问题的方法:)这真的很简单。首先,我创建了列表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();