BPMN: использовать шлюзы или условные потоки?

Обычно, когда перед аналитиком стоит задача разделить поток в процессе на несколько параллельно выполняющих потоков, или выбрать один или несколько потоков, то он выбирает соответствующий тип шлюза. Давайте разберем пример. Вы почувствовали недомогание, и решили померять себе температуру. В зависимости от результатов измерений, могут быть предприняты следующие действия:

  • Вызвать врача на дом (если температура > 38 градусов)
  • Принять парацетамол (если температура > 37 градусов и < 38 градусов)
  • Выпить чай с мёдом (поток по умолчанию)

Вариант №1 «Эксклюзивный шлюз»


Модель такого процесса может выглядеть следующим образом:

V1_Exclusive_GW

Здесь был использован эксклюзивный шлюз, т.к. выбрано можно быть только какое-то одно действие, они взаимоисключающие и условия не пересекаются. Кстати, обратите внимание, что явно пропущено пограничное значение температуры, равное 38 градусам. В этом случае поток управления пойдёт на активность «Выпить чай с мёдом». Это распространённая ошибка, всегда проверяйте граничные значения. Надо либо сделать верхнее условие «>= 38 градусов» либо второе условие сделать «>37 <=38 градусов».


Вариант №2 «Замена эксклюзивного шлюза»


А теперь давайте подумаем, можно ли построить диаграмму такого процесса без использования шлюзов? Конечно можно. Для этого мы используем комбинацию условных потоков и потока по умолчанию. И диаграмма процесса примет следующий вид:

V2_Exclusive_GW_Substitution

К плюсам Варианта №2 (с использованием условных потоков) можно отнести меньшее количество задействованных элементов, ведь шлюз уже можно не моделировать.

Вариант №1 (с использованием шлюза) и Вариант №2 (с использованием условных потоков и потока по умолчанию) оба являются правильными, можно использовать любой подход. Выбор может быть обусловлен стилем моделирования, привычкой или ограничениями имеющегося соглашения о моделировании.

Но вы можете меня спросить: «А какой из этих подходов лучше?». Это будет хороший вопрос, но для ответа на него, давайте немного изменим начальную постановку.


Вариант №3 «Неэксклюзивный шлюз»


Вы почувствовали недомогание, и решили померять себе температуру. И в зависимости от температуры, могут быть предприняты следующие действия:

  • Вызвать врача на дом (если температура >= 38 градусов)
  • Принять парацетамол (если температура > 37 градусов и < 38 градусов)
  • Выпить чай с мёдом (при любой температура, на всякий случай)

Я немного изменил постановку. Теперь в любой ситуации необходимо выпить чай с мёдом и, в зависимости от температуры, можно предпринять одно действие. Эксклюзивный шлюз здесь уже не подойдёт, поскольку при температуре выше 37 градусов должны быть выполнены два действия: «Выпить чаю», а также одно из «Вызвать врача на дом» или «Принять парацетамол», в зависимости от температуры. Необходимо задействовать неэксклюзивный шлюз. И диаграмма процесса примет следующий вид:

V3_Inclusive_GW

Обратите внимание, что понадобился шлюз на объединение потоков. Ведь у нас может в момент разделения потока возникнуть 2 токена и их надо объединить.


Вариант №4 «Замена неэксклюзивного шлюза»


А возможно ли смоделировать и этот вариант диаграммы процесса без использования шлюза? Конечно возможно. Необходимо также использовать комбинацию условных потоков и потока управления, поток по умолчанию нам уже не нужен:

V4_Inclusive_GW_Substitution_

Получившийся вариант очень похож на вариант №2, разница только в том, что поток по умолчанию заменен на поток управления. И от второго, объединяющего шлюза избавиться не получилось. Заменить второй, объединяющий шлюз, активностью не получится. Активности не умеют объединять потоки, т.е. делать из нескольких токенов один.

Если вы хотите освежить в памяти правила работы неэксклюзивного шлюза, особенно на объединение потоков, то вот моя статья с подробными разъяснениями: «BPMN: как работает неэксклюзивный шлюз».


Выводы

Какие выводы можно сделать из всего сказанного и показанного? Без шлюзов, основанных на данных, моделировать можно. В этом могут легко помочь комбинация потоков управления, условных потоков и потока по умолчанию.

Представьте, что вы не знаете изначальной постановки и вам дали проанализировать варианты диаграмм процесса №2 или №4. Чтобы понять, как они работают — вам надо внимательно изучить все потоки, выходящие из активности «Померять температуру» и понять — являются ли они взаимоисключающими или возможна их комбинация. Только после этого вы сможете понять, по какой логике работает процесс. Когда же вы смотрите на диаграммы со шлюзами (Вариант №1 или Вариант №3) — вам сразу понятно, какую логику вложил разработчик модели, выбор действий происходит эксклюзивно, неэксклюзивно или параллельно.

Таким образом можно сделать следующий выводы:

  • Использовать условные потоки для замены шлюзов при разделении потока возможно, это разрешено нотацией
  • Использование условных потоков для замены шлюзов, предназначенных для разделения потока, снижает количество элементов на диаграмме (шлюз уже моделировать нет необходимости)
  • Использование условных потоков снижает читабельность диаграммы
  • При необходимости объединять потоки, в диаграмме не будет соблюдаться принцип симметричности шлюзов (один на разделение, второй на объединение\слияние потока)

Что дальше?


Если вы хотите глубже разобраться в BPMN — записывайтесь на мой авторский онлайн-курс «Основы BPMN». Он включает в себя много интересных материалов и практических упражнений, с самопроверкой. Также можете пройти «Бесплатный тест по основам BPMN» и объективно определить свой уровень знания BPMN. Можете подписаться на новости с моего сайта и примерно 1 раз в 2 месяца вы будете получать рассылку с интересными материалами, анонсами и т.д.

BPMN: использовать шлюзы или условные потоки?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика