Я обычно использую шаблон состояния, чтобы избежать условных операторов.
вместо использования:
switch (state)
{
case ParserState.BeforeMethod:
//do some processing
break;
case ParserState.InMethod:
//do some processing
break;
}
Я могу просто написать:
currentState = currentState.process(context);
Пример класса можетвыглядеть как
public class SomeClass : ParserState
{
public ParserState process(IParserContext context)
{
//do some proceccing
if (m_completed)
return new SomeOtherState();
return this;
}
}
т.е. логика перемещается в небольшие классы, которые используются для обработки определенного состояния.Таким образом, вы получаете две вещи:
- Меньшие классы с четкими обязанностями
- Меньше условных операторов = более читаемый код.