Spring State Machine пропускает начальные состояния - PullRequest
0 голосов
/ 14 мая 2018

У меня проблема с конечным автоматом Spring:

У меня есть иерархия состояний, пусть будет так:

{
    S1 - initial
    S2
    S3 {
        S3S1 - initial
        S3S2
    }
}

В настоящее время я нахожусь в состоянии S2 и хочу перевестичто касается S3S2, я предполагал, что в этом переходе следует вызывать действие в начальном состоянии, но это не так.Например, S3 представляет собой работу с некоторым модальным окном, и в состоянии S3S1 я должен инициализировать это окно, затем после этого, в S3S2, я могу работать с некоторыми элементами управления внутри этого окна, в настоящее время у меня нет способа сделать это путем определения одного перехода изS2 - S3S2 (пожалуйста, исправьте меня, если я ошибаюсь).

Я обнаружил эту очень старую проблему # 71 (https://github.com/spring-projects/spring-statemachine/issues/71) в github, она гласит: «Спецификация упоминает, что машина всегда должна вводить свою исходную информацию».состояние, но это немного неловко, если пользователь хочет войти непосредственно в состояние в автомате. ", но в моем понимании идеи конечного автомата имеет смысл, если вы не проходите через начальные состояния, зачем вам нужна иерархияна всех состояниях, вы можете определить все на одном уровне, по моему мнению, начальные состояния должны подготовить среду для работы других состояний в том же регионе, поэтому я не думаю, что начальные состояния должны быть пропущены, или в худшем случае это поведение должнобыть необязательным.

1 Ответ

0 голосов
/ 14 мая 2018

В некоторых частях спецификации uml упоминается, что составное состояние вводится через его начальное состояние, но формулировка слегка вводит в заблуждение, поскольку это относится к случаю, когда переход заканчивается в конкретном составном состоянии и после этого начального состояния (иначе используется запись по умолчанию ). Переход непосредственно в другое подсостояние называется явной записью . Также есть контролируемый вход через точку входа , что является еще одним способом ввода автоматов.

Если вам нужно выполнить некоторую логику инициализации до S3S2 , то вы можете попробовать сделать это как входное действие в его родительском состоянии S3 . Если вы переходите от S2 к S3S2 , закажите, что происходит, выйдите из S2 , введите S3 , введите S3S2 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...