Недавно я столкнулся с очень интересным сайтом, который выражает очень интересную идею - кампанию anti-if. Вы можете увидеть это здесь, в www.antiifcampaign.com. Я должен согласиться с тем, что сложные вложенные утверждения IF являются абсолютной болью в тылу. В настоящее время я нахожусь в проекте, который до недавнего времени имел некоторые сумасшедшие вложенные IFs, которые прокручивались вправо достаточно. Мы вылечили наши проблемы двумя способами: мы использовали Windows Workflow Foundation для решения проблем маршрутизации (или рабочего процесса). И мы находимся в процессе реализации всех наших бизнес-правил с использованием правил ILOG для .NET(недавно приобретенных IBM!!). Это по большей части вылечило наши вложенные боли ЕС... но я нахожу себя в недоумении, сколько людей излечивают свои боли так, как предлагают хорошие люди в AntiIfCampaign (см. пример здесь), создавая множество сумм абстрактных классов для представления данного сценария, который первоначально был покрыт вложенным IF. Интересно, может ли другой способ устранить эту сложность, может также заключаться в использовании контейнера IoC, такого как StructureMap, для перемещения и из разных бит функциональности. В любом случае...
Вопрос: Учитывая сценарий, когда у меня есть вложенный сложный оператор IF или SWITCH, который используется для оценки определенного типа вещи (например, оценка Enum), чтобы определить, как я хочу обрабатывать обработку этой вещи по типу перечисления - каковы некоторые способы сделать одну и ту же форму обработки без использования иерархической структуры IF или SWITCH?
public enum WidgetTypes
{
Type1,
Type2,
Type3,
Type4
}
...
WidgetTypes _myType = WidgetTypes.Type1;
...
switch(_myType)
{
case WidgetTypes.Type1:
//do something
break;
case WidgetTypes.Type2:
//do something
break;
//etc...
}