Робочі потоки як кінцеві автомати

Робочі потоки як кінцеві автомати

Компонент 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');