Обычно, когда перед аналитиком стоит задача разделить поток в процессе на несколько параллельно выполняющих потоков, или выбрать один или несколько потоков, то он выбирает соответствующий тип шлюза. Давайте разберем пример. Вы почувствовали недомогание, и решили померять себе температуру. В зависимости от результатов измерений, могут быть предприняты следующие действия:
- Вызвать врача на дом (если температура > 38 градусов)
- Принять парацетамол (если температура > 37 градусов и < 38 градусов)
- Выпить чай с мёдом (поток по умолчанию)
Вариант №1 «Эксклюзивный шлюз»
Модель такого процесса может выглядеть следующим образом:
Здесь был использован эксклюзивный шлюз, т.к. выбрано можно быть только какое-то одно действие, они взаимоисключающие и условия не пересекаются. Кстати, обратите внимание, что явно пропущено пограничное значение температуры, равное 38 градусам. В этом случае поток управления пойдёт на активность «Выпить чай с мёдом». Это распространённая ошибка, всегда проверяйте граничные значения. Надо либо сделать верхнее условие «>= 38 градусов» либо второе условие сделать «>37 <=38 градусов».
Вариант №2 «Замена эксклюзивного шлюза»
А теперь давайте подумаем, можно ли построить диаграмму такого процесса без использования шлюзов? Конечно можно. Для этого мы используем комбинацию условных потоков и потока по умолчанию. И диаграмма процесса примет следующий вид:
К плюсам Варианта №2 (с использованием условных потоков) можно отнести меньшее количество задействованных элементов, ведь шлюз уже можно не моделировать.
Вариант №1 (с использованием шлюза) и Вариант №2 (с использованием условных потоков и потока по умолчанию) оба являются правильными, можно использовать любой подход. Выбор может быть обусловлен стилем моделирования, привычкой или ограничениями имеющегося соглашения о моделировании.
Но вы можете меня спросить: «А какой из этих подходов лучше?». Это будет хороший вопрос, но для ответа на него, давайте немного изменим начальную постановку.
Вариант №3 «Неэксклюзивный шлюз»
Вы почувствовали недомогание, и решили померять себе температуру. И в зависимости от температуры, могут быть предприняты следующие действия:
- Вызвать врача на дом (если температура >= 38 градусов)
- Принять парацетамол (если температура > 37 градусов и < 38 градусов)
- Выпить чай с мёдом (при любой температура, на всякий случай)
Я немного изменил постановку. Теперь в любой ситуации необходимо выпить чай с мёдом и, в зависимости от температуры, можно предпринять одно действие. Эксклюзивный шлюз здесь уже не подойдёт, поскольку при температуре выше 37 градусов должны быть выполнены два действия: «Выпить чаю», а также одно из «Вызвать врача на дом» или «Принять парацетамол», в зависимости от температуры. Необходимо задействовать неэксклюзивный шлюз. И диаграмма процесса примет следующий вид:
Обратите внимание, что понадобился шлюз на объединение потоков. Ведь у нас может в момент разделения потока возникнуть 2 токена и их надо объединить.
Вариант №4 «Замена неэксклюзивного шлюза»
А возможно ли смоделировать и этот вариант диаграммы процесса без использования шлюза? Конечно возможно. Необходимо также использовать комбинацию условных потоков и потока управления, поток по умолчанию нам уже не нужен:
Получившийся вариант очень похож на вариант №2, разница только в том, что поток по умолчанию заменен на поток управления. И от второго, объединяющего шлюза избавиться не получилось. Заменить второй, объединяющий шлюз, активностью не получится. Активности не умеют объединять потоки, т.е. делать из нескольких токенов один.
Если вы хотите освежить в памяти правила работы неэксклюзивного шлюза, особенно на объединение потоков, то вот моя статья с подробными разъяснениями: «BPMN: как работает неэксклюзивный шлюз».
Выводы
Какие выводы можно сделать из всего сказанного и показанного? Без шлюзов, основанных на данных, моделировать можно. В этом могут легко помочь комбинация потоков управления, условных потоков и потока по умолчанию.
И сейчас мы подошли к основной мысли данной статьи: «Что лучше использовать: шлюзы или условные потоки»?
Представьте, что вы не знаете изначальной постановки и вам дали проанализировать варианты диаграмм процесса №2 или №4. Чтобы понять, как они работают — вам надо внимательно изучить все потоки, выходящие из активности «Померять температуру» и понять — являются ли они взаимоисключающими или возможна их комбинация. Только после этого вы сможете понять, по какой логике работает процесс. Когда же вы смотрите на диаграммы со шлюзами (Вариант №1 или Вариант №3) — вам сразу понятно, какую логику вложил разработчик модели, выбор действий происходит эксклюзивно, неэксклюзивно или параллельно.
Таким образом можно сделать следующий выводы:
- Использовать условные потоки для замены шлюзов при разделении потока возможно, это разрешено нотацией
- Использование условных потоков для замены шлюзов, предназначенных для разделения потока, снижает количество элементов на диаграмме (шлюз уже моделировать нет необходимости)
- Использование условных потоков снижает читабельность диаграммы
- При необходимости объединять потоки, в диаграмме не будет соблюдаться принцип симметричности шлюзов (один на разделение, второй на объединение\слияние потока)
Стиль моделирования и выбор подхода остаётся на ваше усмотрение, только помните про плюсы и минусы каждого из подходов. Мой опыт и статистика тренингов говорит, что использование шлюзов является более понятным и популярным вариантом решения подобных ситуаций.
Что дальше?
Если вы хотите глубже разобраться в BPMN — записывайтесь на мой авторский онлайн-курс «Основы BPMN». Он включает в себя много интересных материалов и практических упражнений, с самопроверкой. Также можете пройти «Бесплатный тест по основам BPMN» и объективно определить свой уровень знания BPMN. Можете подписаться на новости с моего сайта и примерно 1 раз в 2 месяца вы будете получать рассылку с интересными материалами, анонсами и т.д.
Успехов в моделировании на BPMN!