Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ru:rule:conditional_event_collaboration [2024-08-28 18:35] – [0-TBD Используйте для моделирования межпроцессного взаимодействия событие-условие] Anatoly Belaychukru:rule:conditional_event_collaboration [2024-08-28 20:56] (текущий) – [Смотри также] Anatoly Belaychuk
Строка 1: Строка 1:
-====== 0-TBD Используйте для моделирования межпроцессного взаимодействия событие-условие ======+====== Используйте для моделирования межпроцессного взаимодействия событие-условие ======
  
 {{tag>взаимодействие событие-сообщение событие-условие промежуточное_событие}} {{tag>взаимодействие событие-сообщение событие-условие промежуточное_событие}}
  
-{{:ru:v_razrabotke.png?nolink&200|}} +Событие-сообщение создает тесную связь между процессами: процесс-отправитель сообщения должен знать внутреннее устройство процесса-получателя. 
- +Событие-условие позволяет реализовать более технологичную слабосвязную процессную архитектуру.
-Событие-сообщение создает тесную связь между процессами: процесс-отправитель должен знать внутреннее устройство процесса получателя. +
-Событие-условие позволяет реализовать более технологичнуюслабосвязную процессную архитектуру.+
 ===== ✔ Как надо ===== ===== ✔ Как надо =====
  
Строка 681: Строка 679:
 ===== Примечания ===== ===== Примечания =====
  
-  * Дополнительные комментарии (опционально)+Пока счета выставляет один процесс, большой разницы между схемами с событием-сообщением и событием-условием нет. 
 +Схема с событием-сообщением даже выглядит предпочтительнее, поскольку более наглядно показывает механизм взаимодействия между процессами. 
 + 
 +Ситуация меняется, если принять реалистичное допущение, что у компании несколько процессов продажи: товаров, услуг, розничная, партнерская и т.п. 
 +В этом случае логика процесса обработки выписки банка сильно усложнится:  
 +в него придется добавить развилку, которая будет отправлять сообщение в тот процесс, из которого пришел данный конкретный счет. 
 +При добавлении нового процесса продажи в процесс обработки выписки придется вносить изменения. 
 + 
 +Событие-условие позволяет избавиться от этой зависимости. 
 +Здесь процессам не требуется ничего не знать о внутреннем устройстве друг друга, достаточно интерфейса, роль которого играет хранилище данных: 
 + 
 +  * процесс-клиент (От заказа до оплатыдобавляет запись в таблицу базу данных (Выставленные счета) и ждет, пока значение поля "статус" этой записи изменится на требуемый (оплачен) 
 +  * процесс-сервер (Обработка выписки банка), обрабатывая очередную строку, ищет среди выставленных счетов тот, на который ссылается платеж, и меняет статус найденного счета на "оплачен" 
 +  * процесс-клиент выходит из ожидания и продолжает работу 
 + 
 +Процессов-клиентов и процессов-серверов при этом может быть сколько угодно. 
 + 
 +В случае исполняемой модели процесса событие-сообщение должно автоматически обрабатываться движком. 
 +Если процессный движок не поддерживает событие-условие, его легко заменить комбинацией развилки "или-или" и таймера: 
 + 
 +<bpmnio type="bpmn"> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> 
 +  <process id="Process_1" isExecutable="false"> 
 +    <exclusiveGateway id="Gateway_04akzo7" name="Статус счета &#39;оплачен&#39;?"> 
 +      <incoming>Flow_158maf0</incoming> 
 +      <outgoing>Flow_0kylthe</outgoing> 
 +      <outgoing>Flow_14u27z9</outgoing> 
 +    </exclusiveGateway> 
 +    <task id="Activity_03e92gq" name="..."> 
 +      <incoming>Flow_0kylthe</incoming> 
 +    </task> 
 +    <sequenceFlow id="Flow_0kylthe" name="да" sourceRef="Gateway_04akzo7" targetRef="Activity_03e92gq" /> 
 +    <task id="Activity_0t18jdq" name="..."> 
 +      <outgoing>Flow_1afx0lh</outgoing> 
 +    </task> 
 +    <intermediateCatchEvent id="Event_1dsja6c"> 
 +      <incoming>Flow_14u27z9</incoming> 
 +      <incoming>Flow_1afx0lh</incoming> 
 +      <outgoing>Flow_158maf0</outgoing> 
 +      <timerEventDefinition id="TimerEventDefinition_0s6iums" /> 
 +    </intermediateCatchEvent> 
 +    <sequenceFlow id="Flow_14u27z9" name="нет" sourceRef="Gateway_04akzo7" targetRef="Event_1dsja6c" /> 
 +    <sequenceFlow id="Flow_158maf0" sourceRef="Event_1dsja6c" targetRef="Gateway_04akzo7" /> 
 +    <sequenceFlow id="Flow_1afx0lh" sourceRef="Activity_0t18jdq" targetRef="Event_1dsja6c" /> 
 +  </process> 
 +  <bpmndi:BPMNDiagram id="BPMNDiagram_1"> 
 +    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1"> 
 +      <bpmndi:BPMNShape id="Gateway_04akzo7_di" bpmnElement="Gateway_04akzo7" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="255" y="105" width="50" height="50" /> 
 +        <bpmndi:BPMNLabel> 
 +          <omgdc:Bounds x="241" y="162" width="79" height="27" /> 
 +        </bpmndi:BPMNLabel> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_03e92gq_di" bpmnElement="Activity_03e92gq"> 
 +        <omgdc:Bounds x="360" y="90" width="100" height="80" /> 
 +        <bpmndi:BPMNLabel /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_0t18jdq_di" bpmnElement="Activity_0t18jdq"> 
 +        <omgdc:Bounds x="30" y="90" width="100" height="80" /> 
 +        <bpmndi:BPMNLabel /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Event_1qdilzi_di" bpmnElement="Event_1dsja6c"> 
 +        <omgdc:Bounds x="182" y="112" width="36" height="36" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_0kylthe_di" bpmnElement="Flow_0kylthe"> 
 +        <di:waypoint x="305" y="130" /> 
 +        <di:waypoint x="360" y="130" /> 
 +        <bpmndi:BPMNLabel> 
 +          <omgdc:Bounds x="324" y="112" width="17" height="14" /> 
 +        </bpmndi:BPMNLabel> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_14u27z9_di" bpmnElement="Flow_14u27z9"> 
 +        <di:waypoint x="280" y="105" /> 
 +        <di:waypoint x="280" y="70" /> 
 +        <di:waypoint x="200" y="70" /> 
 +        <di:waypoint x="200" y="112" /> 
 +        <bpmndi:BPMNLabel> 
 +          <omgdc:Bounds x="293" y="73" width="13" height="14" /> 
 +        </bpmndi:BPMNLabel> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_158maf0_di" bpmnElement="Flow_158maf0"> 
 +        <di:waypoint x="218" y="130" /> 
 +        <di:waypoint x="255" y="130" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1afx0lh_di" bpmnElement="Flow_1afx0lh"> 
 +        <di:waypoint x="130" y="130" /> 
 +        <di:waypoint x="182" y="130" /> 
 +      </bpmndi:BPMNEdge> 
 +    </bpmndi:BPMNPlane> 
 +  </bpmndi:BPMNDiagram> 
 +</definitions> 
 +</bpmnio> 
 + 
 +В случае неисполняемой модели событие-условие моделирует действия сотрудника, который периодически нажимает клавишу F5 на странице информационной системы,  
 +отображающей перечень выставленных счетов с их статусом.
  
 ===== Исключения ===== ===== Исключения =====
  
-  * Исключения из правила (если есть)+Схема взаимодействия с помощью событий-сообщений приемлемаесли в нем участвуют ровно два процесса.
  
 ===== Смотри также ===== ===== Смотри также =====
  
   * [[external_event]]   * [[external_event]]
 +  * [[event_gateway_warning]]
 +  * [[collapsed_subprocess]]
 +  * [[single_process]]
 +
 ===== Автор(ы) ===== ===== Автор(ы) =====
  
  --- //[[user:bell|Anatoly Belaychuk]] 2024-08-27 18:18//  --- //[[user:bell|Anatoly Belaychuk]] 2024-08-27 18:18//