Обновление:
Шаблон состояния может быть неправильным способом решения этой проблемы. Следовательно, приветствуется любой другой узор. В основном я ищу способ иметь защитные условия для каждого состояния, но при этом иметь чистый и поддерживаемый код. Каким образом внешние системы маршрутизации, такие как emberjs, ui-router и response-router, будут реализовывать guard conditions
, чтобы избежать перехода в определенное состояние, если условие не выполняется?
Я хочу реализовать конечный автомат, используя State Pattern, но я не могу об этом думать. Вкратце это как:
If error -> error state
If A && B && C -> second state
If only A -> first state
В любом состоянии, при ошибке, мы переходим в состояние ошибки. входы (события) A, B и C могут поступать в любом порядке, но если все они проходят, мы переходим во 2-е состояние. Если применяется только вход A, мы переходим в 1-е состояние.
Следующая диаграмма состояний взята из книги Мартина Фаулера по определенному языку предметной области.
В описании он говорит:
У мисс Грант в спальне есть секретный отсек, который обычно запирается и скрывается. Чтобы открыть его, она должна закрыть дверь, затем открыть второй ящик в сундуке и включить прикроватный свет в любом порядке. Как только это будет сделано, она сможет открыть секретную панель.
Подчеркиваю, что turning light
и opening 2nd drawer
могут происходить в любом порядке. То же, что A, B и C.
На основе комментария @SQLPolice и книги я нарисовал это:
Но проблема в том, что я мог бы (A && B && C && D && D && E). В этом случае будет обременительно иметь все промежуточные состояния комбинации.
lex
,flex
и т. Д. (Для лексического анализа). Они создают код на языке C с множеством меток иgoto
прыжков ... - person SQL Police   schedule 01.07.2015