====== Используйте для моделирования межпроцессного взаимодействия событие-условие ====== {{tag>взаимодействие событие-сообщение событие-условие промежуточное_событие}} Событие-сообщение создает тесную связь между процессами: процесс-отправитель сообщения должен знать внутреннее устройство процесса-получателя. Событие-условие позволяет реализовать более технологичную слабосвязную процессную архитектуру. ===== ✔ Как надо ===== Flow_09aipy9 Flow_09aipy9 Flow_16kqfso Flow_16kqfso Flow_1s33fqb Flow_008j1br Flow_1s33fqb Flow_1ins0qh Flow_1lsywu4 DataStoreReference_1o133y4 Flow_008j1br Flow_1ins0qh Flow_1lsywu4 Flow_0bg3trg Flow_1wyen10 Flow_1wyen10 Flow_165lj3o Flow_0ea0g86 Flow_165lj3o Flow_0bg3trg Flow_0ea0g86 Flow_1xejeiu Flow_0uoc8i4 Flow_1xejeiu Flow_0uoc8i4 Flow_1w0i707 Flow_1j3yt6b Flow_1j3yt6b Flow_12i57do DataStoreReference_1o133y4 Property_1irqq7e Flow_12i57do Flow_0kxrz4w Flow_081u6je Flow_0kxrz4w Flow_081u6je Flow_0pavqii DataStoreReference_1o133y4 Flow_0pavqii Flow_1w0i707 для каждой строки ===== ✘ Как НЕ надо ===== Flow_09aipy9 Flow_09aipy9 Flow_16kqfso Flow_16kqfso Flow_1s33fqb Flow_008j1br Flow_1s33fqb Flow_1ins0qh Flow_1lsywu4 DataStoreReference_1o133y4 Flow_008j1br Flow_1ins0qh Flow_1lsywu4 Flow_0bg3trg Flow_1wyen10 Flow_0bg3trg Flow_0ea0g86 Flow_1wyen10 Flow_165lj3o Flow_0ea0g86 Flow_165lj3o Flow_1w0i707 Flow_1xejeiu Flow_0uoc8i4 Flow_1xejeiu Flow_0uoc8i4 Flow_1w0i707 Flow_1j3yt6b Flow_1j3yt6b Flow_12i57do DataStoreReference_1o133y4 Property_1irqq7e Flow_12i57do Flow_0kxrz4w Flow_081u6je Flow_081u6je Flow_0kxrz4w для каждой строки ===== Примечания ===== Пока счета выставляет один процесс, большой разницы между схемами с событием-сообщением и событием-условием нет. Схема с событием-сообщением даже выглядит предпочтительнее, поскольку более наглядно показывает механизм взаимодействия между процессами. Ситуация меняется, если принять реалистичное допущение, что у компании несколько процессов продажи: товаров, услуг, розничная, партнерская и т.п. В этом случае логика процесса обработки выписки банка сильно усложнится: в него придется добавить развилку, которая будет отправлять сообщение в тот процесс, из которого пришел данный конкретный счет. При добавлении нового процесса продажи в процесс обработки выписки придется вносить изменения. Событие-условие позволяет избавиться от этой зависимости. Здесь процессам не требуется ничего не знать о внутреннем устройстве друг друга, достаточно интерфейса, роль которого играет хранилище данных: * процесс-клиент (От заказа до оплаты) добавляет запись в таблицу базу данных (Выставленные счета) и ждет, пока значение поля "статус" этой записи изменится на требуемый (оплачен) * процесс-сервер (Обработка выписки банка), обрабатывая очередную строку, ищет среди выставленных счетов тот, на который ссылается платеж, и меняет статус найденного счета на "оплачен" * процесс-клиент выходит из ожидания и продолжает работу Процессов-клиентов и процессов-серверов при этом может быть сколько угодно. В случае исполняемой модели процесса событие-сообщение должно автоматически обрабатываться движком. Если процессный движок не поддерживает событие-условие, его легко заменить комбинацией развилки "или-или" и таймера: Flow_158maf0 Flow_0kylthe Flow_14u27z9 Flow_0kylthe Flow_1afx0lh Flow_14u27z9 Flow_1afx0lh Flow_158maf0 В случае неисполняемой модели событие-условие моделирует действия сотрудника, который периодически нажимает клавишу F5 на странице информационной системы, отображающей перечень выставленных счетов с их статусом. ===== Исключения ===== Схема взаимодействия с помощью событий-сообщений приемлема, если в нем участвуют ровно два процесса. ===== Смотри также ===== * [[external_event]] * [[event_gateway_warning]] * [[collapsed_subprocess]] * [[single_process]] ===== Автор(ы) ===== --- //[[user:bell|Anatoly Belaychuk]] 2024-08-27 18:18//