2014-10-16 99 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