Недавно я слушал технический доклад по чистому кодированию. Спикер был инженером-тестировщиком, который подчеркивал необходимость избегать операторов if в коде и максимально использовать полиморфизм. Также он выступал против глобальных государств.
Я вполне согласен с ним, но мне нужно разъяснение о замене глобального состояния и оператора if, используя полиморфизм для приведенного ниже сценария,
В моем документе 3 состояния. Я хочу изменить состояние компонентов пользовательского интерфейса на основе состояния документа. Прямо сейчас я использую блоки if и тип перечисления, содержащий текущее состояние документа, для перехода состояний компонентов пользовательского интерфейса.
Например:
enum DOC_STATE
{
DOC_STATE_A = 0,
DOC_STATE_B,
DOC_STATE_C
};
void QMainWindow::handleUi(_docState)
{
switch(_docState)
{
case (DOC_STATE_A):
{
menu.disable();
....
}
case (DOC_STATE_B):
{
menu.enable();
...
}
case (DOC_STATE_C):
{
...
}
}
Я думаю, что я могу иметь отдельные дочерние классы для каждого состояния и иметь метод handleUI () в каждом классе. Вызов метода handleUi () вызывает правильный вызов метода. Но, скажем, я поддерживаю эти объекты в моем документе, как я могу переключаться с одного объекта на другой каждый раз, когда происходит переход в состояние?
Другими словами, как обрабатывать переход пользовательского интерфейса, отслеживая изменение состояния документа, не используя глобальное состояние и операторы if или Switch?
Я использую Qt. Спасибо.