Спецификация BPMN говорит нам следующее:

«Разделяющий неэклюзивный (инклюзивный) шлюз  может использоваться для создания альтернативных, но также и параллельных путей в рамках потока последовательности. В отличие от эксклюзивного шлюза, вычисляются все выражения условий. Истинное вычисление одного выражения условия не исключает вычисления других выражений условия. Все потоки последовательности с истинной оценкой будут пройдены токеном. Поскольку каждый путь считается независимым, могут быть использованы все комбинации путей, от нуля до всех. Однако шлюз должен быть спроектирован таким образом, чтобы был выбран хотя бы один поток последовательности»

Все слова по отдельности в принципе понятны. Но как это применить при моделировании бизнес-процессов? Текст спецификации, конечно, весьма непрост для понимания, поэтому я объясню на примере.

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

  1. Только мойка (это будет вариант по умолчанию)
  2. Мойка с ковриками
  3. Мойка с чисткой салона
  4. Мойка с ковриками и чисткой салона

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

Вариант №1: как можно обойтись без неэксклюзивного шлюза

Что же не очень хорошо в данной диаграмме? Во-первых, это количество эксклюзивных шлюзов. Здесь их целых четыре. Второй, менее очевидный минус – это жесткая последовательность действий: сначала надо помыть автомобиль, потом помыть коврики и только потом почистить салон. Не всем мастерам на мойке это понравится, когда вы будете настаивать на такой технологии процесса. Можно попробовать распараллелить эти действия с помощью параллельного шлюза:

Вариант №2: Как можно обойтись без неэксклюзивного шлюза
Вариант №2: как можно обойтись без неэксклюзивного шлюза

Модель стала солиднее, хочется её рассмотреть подробнее и понять, в чём тут дело. Но количество шлюзов уже возросло до шести! А если мы добавим в процесс хотя бы ещё одну опцию? Например, полировку кузова воском. Тогда количество возможных вариантов возрастёт уже до восьми (!):

  1. Только мойка (это будет вариант по умолчанию )
  2. Мойка с ковриками
  3. Мойка с чисткой салона
  4. Мойка с полировкой кузова воском
  5. Мойка с ковриками и чисткой салона
  6. Мойка с ковриками и полировкой кузова воском
  7. Мойка с чисткой салона и полировкой кузова воском
  8. Мойка с ковриками, чисткой салона и полировкой кузова воском

Не буду строить модель такого мега-процесса, но нетрудно подсчитать, что, если моделировать в предыдущем стиле, количество шлюзов возрастёт уже до 10.

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

Вариант №3: с неэксклюзивными шлюзами

Данный вариант модели хорош по нескольким причинам:

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

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

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

Правило работы неэксклюзивного шлюза при объединении потоков звучит так:

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

Проще говоря: объединяющий неэксклюзивный шлюз ждёт прихода всех токенов, возникших в момент разделения потока. Это самый тонкий момент для понимания работы неэксклюзивного шлюза. Если возник один токен (например, была выбрана только мойка автомобиля), значит, токен сразу пройдёт через объединяющий неэксклюзивный шлюз на задачу «Оплатить услуги мойки».

Демонстрация работы неэксклюзивного шлюза в среде исполнения CAMUNDA

Если было выбрано несколько услуг, например, мойка кузова и мойка ковриков, то сначала завершится какая-то одна задача и первый токен придёт на объединяющий неэксклюзивный шлюз, где будет ждать второй токен. После завершения второй задачи и поступления второго токена на шлюз два токена будут объединены в один, и он будет отправлен дальше, на задачу «Оплатить услуги мойки».

Надеюсь, теперь вы будете более оптимально подбирать тип шлюза при моделировании своих бизнес-процессов.

Если вы хотите больше узнать не только про неэксклюзивный шлюз, но и про BPMN в целом, записывайтесь на мой авторский открытый тренинг “Моделирование бизнес-процессов в BPMN 2.0”. Если вы уже овладели основами BPMN, тогда добро пожаловать на тренинг “Профессиональное моделирование на BPMN, DMN и CMMN”.

BPMN: как работает неэксклюзивный шлюз

BPMN: как работает неэксклюзивный шлюз: 2 комментария

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

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

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