我有一个方法,其中有很多if语句
,我根据员工职位筛选SharePoint列表
。结果是查询字符串
,作为参数传递给另一个方法QuerySPList
。
public List<Phone> GetListOfPhones(Employee emp)
{
List<Phone> records = new List<Phone>();
string query = string.Empty;
if (emp.Positions.Count == 1 && emp.Positions[0] == "Regular")
{
query = "";// some querystring
}
if (emp.Positions.Count == 1 && emp.Positions[0] == "OfficeDirector")
{
query = "";// some querystring
}
if (emp.Positions.Count == 1 && emp.Positions[0] == "Admin")
{
query = "";// some querystring
}
if (emp.Positions.Count == 2 && emp.Positions.Contains("Regular") && emp.Positions.Contains("OfficeDirector"))
{
query = "";// some querystring
}
var rawItems = QuerySPList(query);
foreach (SPListItem item in rawItems)
{
//business logic
}
return records;
}}
我读到过,通过实现“策略模式”,我们可以避免使用大量的“if”代码混乱。然而,我是开发和设计模式的新手,所以我需要一些帮助。如果有人能指导我该怎么做并给我建议,欢迎回答我的问题。我有想法,但我觉得我走错了方向。我的想法是创建一个“接口IRoleHandler”,然后将其实现到3个类中,例如“RoleAdmin,RoleRegular,RoleOfficeDirector”。类似这样:
public interface IRoleHandler<T>
{
string handleRole(T obj);
}
public class RoleAdmin:IRoleHandler<Employee>
{
public string handleRole(Employee emp)
{
if (emp.Positions.Count == 1 && emp.Positions[0] == "Admin")
{
//return some string query
}
}
}
那么,创造一个类似于这样的“字典”:
dictionary
的想法如下:Dictionary<string, IRoleHandler<Employee>> strategyHandlers = new Dictionary<string, IRoleHandler<Employee>>();
strategyHandlers.Add("Admin", new RoleAdmin());
strategyHandlers.Add("Regular", new RoleRegularUser());