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

Подпроцесс «Подготовка»

Подпроцесс «Ловля зайца»

Статья понравилась. Простым языком объясняются базовые элементы и принципы.
Замечание: непрерывающий аттач таймер и Message Task Иди работай - куда придет это сообщение? Скорее тут user task обычный - и не выдумывать межпроцессные взаимодействия
В процессе подготовки к ловле зайца получение сигнала неоднозначно. Откуда придет сигнал? Кто поймет, что Петр зациклился и остановит бедолагу? Тут было бы правильным поставить после развилки по событиям второй таймер: если Петр не обнаружил перца до вечера, то отпустить уже его спать (завтра ему в 6 утра опять за кирпичом идти:))). Способ не единственный, можно и без этой развилки обойтись, циклом, например. Но если с развилкой, то сигнал тут не совсем то.
А в процессе "Ловля зайца" событие "Появился заяц" - это, скорее, Conditional Event. Так как сигнал нужно откуда-то получить, он сам не матеериализуется.
Спасибо за ваш комментарий и интересные замечания! Вы абсолютно правы — в предложенных схемах действительно есть спорные моменты. История про Петю и зайца хороша тем, что её можно додумывать и интерпретировать по-разному — хоть как бытовую байку, хоть как метафору системных процессов.
По поводу сигнала в цикле ожидания перца:
Да, это не классическая трактовка Signal Event. Но именно поэтому она и была выбрана: здесь «сигнал» — это способ показать внешнее, неявное вмешательство. Пётр сам ничего не делает, перец появляется не по его инициативе, и он даже не знает, кто и когда это сделает. Формально, можно было бы использовать таймер или Conditional Event, но Signal тут подчёркивает разрыв между действием и причиной — Пётр пассивен, результат зависит от «внешней магии» (в лице Зинаиды).
Насчёт завершения цикла — «вечером отправить Петра спать»:
Вы правы — с точки зрения корректного моделирования в BPMN действительно стоило бы предусмотреть прерывание процесса: например, таймер, который по наступлении определённого времени завершает цикл ожидания и отправляет бедного Петю домой. Но в рамках условий нашей «шутливой» задачи я сознательно оставила этот момент открытым, чтобы подчеркнуть идею зацикливания и зависимость от внешнего вмешательства. Это добавляет процессу гротеска и подчёркивает, как легко в реальности упустить точку выхода, если её явно не задать.
По поводу события «Появился заяц»:
Согласна, по нотации это скорее Conditional Event. Но и Signal Event тут выбран осознанно. В реальности Пётр не может определить условия появления зайца — для него это просто неожиданное событие извне. Он может сколько угодно сидеть в засаде, но не знает, по каким признакам заяц появится. Это вполне укладывается в концепцию Signal Event: неконтролируемое внешнее событие, не зависящее от действий участника процесса.
Спасибо ещё раз за интерес к статье и схеме — такие замечания очень помогают лучше осмыслить, как техника и форма взаимодействуют с содержанием, и как даже шутливые процессы могут натолкнуть на серьёзные выводы.
Отличная статья!) прям очень круто и понятно раздевала всё) спасибо огромное 🔥✨
Подписался)
А где можно проверять как будут двигаться токены? Чтобы прямо бегали по схеме как в статье?
В Camunda есть такой функционал, но он платный.
Я делала в Storm (https://stormbpmn.com)
Это прям целый курс: надо в течение недели перечитывать и практиковаться, практиковаться и перечитывать!
Легкий путь к BPMN: просто, быстро и без заморочек