Должен ли конечный автомат раскрывать свое текущее состояние?

Мы используем "структуру" конечного автомата (основанную на шаблоне состояний), которая не раскрывает свое текущее состояние, что иногда означает, что я должен действовать окольными путями.

Когда я сомневался в этом дизайнерском решении, одним из оправданий было то, что «если вам нужно знать текущее состояние, вы используете его неправильно».

Это правильно? Я не очень разбираюсь в государственных машинах.

(Я ' Я спрашиваю здесь, потому что знаю, что у меня есть врожденное предубеждение против паттерна состояний, которое я считаю слишком многословным.)

ПРИМЕР

Представьте себе систему, которая в одном из состояний считывает данные с двух датчиков. Один датчик выдает числовое значение, другой - логическое, которое сообщает вам, является ли первый «надежным» или нет. Система выводит значение, которое является либо текущим «хорошим» значением, либо интерполяцией (или другим причудливым вычислением) на основе последних n хороших значений.

Моя идея состояла бы в том, чтобы иметь два подсостояния - один «хорошо», другой - «нет». И когда приходит новое значение, я хотел бы спросить конечный автомат, в каком оно состоянии, чтобы я знал, как обрабатывать интерполяцию.

(Думаю, я ответил на свой вопрос: решением было бы иметь событие NewDataValue (val) в конечном автомате, которое будет пересылать только значение из «хорошего» состояния?)

8
задан Benjol 23 March 2011 в 08:39
поделиться