1

我有这个嵌套的 if else 条件。我想要的检查流程在下面的代码中描述。

if (HiringManagerAPPROVED)
{ 
    //email reporting gropu
}
else if (ReportingGroupAPPROVED)
{ 
    //email Hiringmanager
}
else if (HiringManagerReAPPROVED)
{ 
    //email PPO
}                }
else if (PpoAPPROVED)
{ 
    //email Finance
}
else if (FinanceAPPROVED)
{ 
    //email president & COO
}
else if (PresidentCooAPPROVED)
{ 
    //email hr
}
else if (HRAPPROVED)
{
    //email Hiring Manager
}

如何减少检查次数,保持检查流程不变。

4

3 回答 3

5

Finance, Ppo, 并且HiringManager可能是用户,但在我看来他们更像角色。

无论哪种方式,您最终可能会做的是拥有一组 Role 对象,每个对象都有一个IsApproved字段

public class Role
{
    public RoleType Type { get; set; }
    public bool IsApproved { get; set; }
    public string EmailAddress { get; set; }
    //etc
}

public enum RoleType
{
    Finance,
    HiringManager,
    //etc
}

在你这样做之后,你可以用这个替换你的 if 语句

List<Role> roles = new List<Role>();
// populate your roles how you like

foreach (Role role in roles)
{
    if (role.IsApproved)
    {
        // email roll
    }
}

请记住,如果您对这些角色所做的只是在他们获得批准后发送一封电子邮件,那么您将不会从这种方法中获得太多优势。

当您必须根据角色的批准方式或什至基于其他标准对角色执行其他操作时,优势就出现了。

于 2014-10-16T16:25:09.510 回答
0

你可能想把它变成一个开关。这是一些伪代码:

switch($group) {
  case "HiringManager":
    // do stuff
    break;

  case "Reporting":
    // do stuff
    break;

  case "HiringManagerRe":
    // do stuff
    break;

  case "Ppo":
    // do stuff
    break;

  case "Finance":
    // do stuff
    break;

  case "PresidentCoo":
    // do stuff
    break;

  case "HR":
    // do stuff
    break;
}

您可能想要做的是在每种情况下设置电子邮件地址,然后根据您设置的任何地址发送邮件。

send_email($addresses);
于 2014-10-16T16:28:27.933 回答
0

我可能对此阅读过多,但看起来您正在尝试做一个简单的工作流程,招聘流程的状态决定了会发生什么以及接下来会发生什么。在不了解您的架构的情况下,这感觉像是一个使用简单状态机或更可能是命令模式来创建实际工作流的好地方。这样可以很好地封装和测试每个步骤,并且还可以让您在未来发生的事情方面更加灵活。

有几种不同的方法可以做到这一点,但这里已经很好地说明了一种方法:http: //salakoahmed.blogspot.com/2008/08/command-pattern-as-workflow-patter.html

于 2014-10-16T16:35:42.207 回答