Рабочие потоки как конечные автоматы
Дата обновления перевода 2023-07-06
Рабочие потоки как конечные автоматы
Компонент рабочего потока моделируется после сети рабочего потока (Workflow net), которая является подклассом of a Petri net. Путём добавления дальнейших ограничений, вы можете получить конечный автомат. Наиболее важным аспектом является то, что конечный автомат не может находиться одновременно более, чем в одном месте. Также стоит отметить, что если рабочий поток обычно не имеет цикличный путь в графике определения, то для конечного автомата это обычное дело.
Пример конечного автомата
Запрос на включение кода начинается в иходном состоянии "старта", состоянии, например, для выполнения тестов в Travis. Когда они закончены, запрос на включение кода находится в состоянии "обзора", когда участники могут запрашивать изменения, отвергать или принимать запрос. В любое время вы также можете "обновить" запрос, что приведёт к ещё одному запуску Travis.
Ниже вы можете увидеть конфигурацию для запроса включения кода конечного автомата.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
# app/config/config.yml
framework:
workflows:
pull_request:
type: 'state_machine'
supports:
- AppBundle\Entity\PullRequest
places:
- start
- coding
- travis
- review
- merged
- closed
transitions:
submit:
from: start
to: travis
update:
from: [coding, travis, review]
to: travis
wait_for_review:
from: travis
to: review
request_change:
from: review
to: coding
accept:
from: review
to: merged
reject:
from: review
to: closed
reopen:
from: closed
to: review
Теперь вы можетеиспользовать этот конечный автомат, получая сервис state_machine.pull_request
service:
1
$stateMachine = $this->container->get('state_machine.pull_request');