我有这个嵌套的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
}
如何减少支票数量,保持支票流量不变。
答案 0 :(得分: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
}
}
请记住,如果他们所有这些角色都会发送电子邮件,如果他们获得批准,那么您将无法通过此方法获得更多优势
当你必须根据他们的批准方式,甚至基于其他标准对角色做其他事情时,优势就来了。
答案 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