2014-10-16 159 views
1

我有这个嵌套的if else条件。下面的代码描述了我需要的支票流程。简化嵌套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

你需要重新考虑你的设计。也许商店谁在列表中批准任何循环通过他们或任何。并尝试codereview.stackexchange.com。 – 2014-10-16 16:20:33

+3

如果这是整个列表,那么我已经看到更糟! – Andrew 2014-10-16 16:21:33

+3

它不嵌套,如果别人 – Shaharyar 2014-10-16 16:24:31

回答

5

Finance,PpoHiringManager可能是用户,但他们看起来更像角色。

无论哪种方式,你很可能最终做是有作用对象的集合,每个都有一个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 
    } 
} 

请记住,如果您要处理这些角色的所有内容都是在批准后发送电子邮件,那么您将无法利用此方法获得太多优势。

当您必须根据角色的批准方式或甚至基于其他标准对角色执行其他操作时,才会带来好处。

+0

您的代码会将电子邮件发送给所有“已批准”角色。但OP代码将它发送给唯一的角色。 – Shaharyar 2014-10-16 16:35:28

+0

@Shaharyar这是一个功能 – 2014-10-16 16:44:15

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

就我个人而言,我不认为这是一个改进! – Andrew 2014-10-16 16:33:38

+0

这取决于您使用的语言。编译时,交换机实际上可以比ifelse语句执行得更快,所以如果没有其他的话,它将会提高性能。 – 2014-10-16 16:40:47

0

我可能会被过度解读这一点,但它看起来像你试图做一个简单的工作流程,在招聘过程中的状态决定接下来会发生什么,并会发生什么。如果不了解更多关于架构的知识,这就好像是一个真正适合使用简单状态机的地方,或者更可能是命令模式来创建实际工作流。这使得每一步都能很好地进行封装和测试,而且它还使您在未来发生的事情方面更加灵活。

有几种不同的方式做到这一点,但一个是在这里阐述得非常好:http://salakoahmed.blogspot.com/2008/08/command-pattern-as-workflow-patter.html