Упростить вложенное, если еще условие

1

У меня есть это вложенное условие 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.
  • 3
    Если это весь список, то я видел намного хуже!
Показать ещё 4 комментария
Теги:
if-statement
nested-if

3 ответа

5
Лучший ответ

Finance, Ppo и HiringManager могут быть пользователи, но они смотрят на меня более похожи на роли.

В любом случае, что вы, вероятно, в конечном итоге делаете, это сбор объектов Role, каждый из которых IsApproved поле 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
    Ваш код будет отправлять электронные письма всем Approved ролям. Но код OP отправляет его только на одну роль.
  • 0
    @Shaharyar Это особенность
0

Возможно, я слишком много читаю в этом, но похоже, что вы пытаетесь сделать простой рабочий процесс, когда состояние процесса найма определяет, что происходит и что происходит дальше. Не зная больше о вашей архитектуре, это похоже на действительно хорошее место для использования простой машины состояний или, скорее, Command Pattern для создания фактического рабочего процесса. Это позволяет каждому шагу быть хорошо инкапсулированным и проверенным, а также позволяет вам быть более гибким с точки зрения того, что происходит, когда в будущем.

Есть несколько способов сделать это, но здесь очень хорошо написано: http://salakoahmed.blogspot.com/2008/08/command-pattern-as-workflow-patter.html

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
    Лично я не думаю, что это улучшение!
  • 0
    Это зависит от языка, который вы используете. При компиляции переключатели могут фактически выполняться быстрее, чем операторы ifelse, так что это будет улучшение производительности, если ничего больше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню