简化嵌套if-else条件

本文关键字:条件 if-else 嵌套 | 更新日期: 2023-09-27 18:26:43

我有这个嵌套的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
}

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

简化嵌套if-else条件

FinancePpoHiringManager可以是用户,但在我看来,它们更像是角色。

无论哪种方式,您最终可能会得到一个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
    }
}

请记住,如果你只想在这些角色获得批准后发送一封电子邮件,那么这种方法不会给你带来太大优势。

当你必须根据角色的批准方式,甚至根据其他标准,对角色做其他事情时,优势就来了。

您可能想把它变成一个开关。这里有一些伪代码:

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);

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

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