Робочі потоки як кінцеві автомати
Робочі потоки як кінцеві автомати
Компонент Workflow моделюється після мережі робочого потоку (Workflow net), яка є підкласом of a мережі Петрі. Шляхом додавання подальших обмежень, ви можете отримати кінцевий автомат. Найбільш важливим аспектом є те, що кінцевий автомат не може перебувати одночасно більше, ніж в одному місці. Також варто зазначити, що якщо робочий потік зазвичай не має циклічного шляху в графіку визначення, то для кінцевого автомата це звичайна справа.
Приклад кінцевого автомату
Запит на включення коду починається у вихідному стані "старту", стані, наприклад, для виконання тестів у 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
:
1
$stateMachine = $this->container->get('state_machine.pull_request');