简化嵌套if else条件

时间:2014-10-16 16:19:10

标签: c# asp.net if-statement nested-if

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

如何减少支票数量,保持支票流量不变。

3 个答案:

答案 0 :(得分:5)

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
    }
}

请记住,如果他们所有这些角色都会发送电子邮件,如果他们获得批准,那么您将无法通过此方法获得更多优势

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

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