У меня есть это вложенное условие 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
}
Как уменьшить количество проверок, сохраняя поток чеков как есть.
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
}
}
Имейте в виду, что если все, что вы собираетесь делать с этими ролями, отправляет электронное письмо, если оно одобрено, то вы не получите большого преимущества от этого подхода.
Преимущество заключается в том, что вам нужно делать другие вещи с помощью ролей, основанных на том, как они утверждаются, или даже на основе других критериев.
Approved
ролям. Но код OP отправляет его только на одну роль.
Возможно, я слишком много читаю в этом, но похоже, что вы пытаетесь сделать простой рабочий процесс, когда состояние процесса найма определяет, что происходит и что происходит дальше. Не зная больше о вашей архитектуре, это похоже на действительно хорошее место для использования простой машины состояний или, скорее, Command Pattern для создания фактического рабочего процесса. Это позволяет каждому шагу быть хорошо инкапсулированным и проверенным, а также позволяет вам быть более гибким с точки зрения того, что происходит, когда в будущем.
Есть несколько способов сделать это, но здесь очень хорошо написано: http://salakoahmed.blogspot.com/2008/08/command-pattern-as-workflow-patter.html
Вероятно, вы захотите превратить это в переключатель. Вот какой-то псевдокод:
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);