Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:rule:structured_diagram [2024-08-25 21:52] – [Notes] Anatoly Belaychuken:rule:structured_diagram [2024-11-27 15:48] (current) – [✘ How NOT to] Anatoly Belaychuk
Line 1: Line 1:
-====== 0-TBD Follow structured modeling rules ======+====== Follow structured modeling rules ======
  
-{{tag>subprocess gateway cycle}} +{{tag>subprocess gateway loop}}
- +
-{{en:underconstruction.png?nolink&200|}}+
  
 Leverage structured blocks and subprocesses. Leverage structured blocks and subprocesses.
Line 403: Line 401:
 </bpmnio> </bpmnio>
  
-Process will work fine (no hangouts) but it isn't obvious. 
- 
-<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:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> 
-  <process id="Process_02spwhn"> 
-    <parallelGateway id="Gateway_078sx6b"> 
-      <outgoing>Flow_0e02mrs</outgoing> 
-      <outgoing>Flow_0mh672n</outgoing> 
-    </parallelGateway> 
-    <task id="Activity_0aai754"> 
-      <incoming>Flow_0e02mrs</incoming> 
-      <outgoing>Flow_05ddike</outgoing> 
-    </task> 
-    <sequenceFlow id="Flow_0e02mrs" sourceRef="Gateway_078sx6b" targetRef="Activity_0aai754" /> 
-    <task id="Activity_120ghig"> 
-      <incoming>Flow_0mh672n</incoming> 
-      <outgoing>Flow_0ny7lm8</outgoing> 
-    </task> 
-    <sequenceFlow id="Flow_0mh672n" sourceRef="Gateway_078sx6b" targetRef="Activity_120ghig" /> 
-    <sequenceFlow id="Flow_0ny7lm8" sourceRef="Activity_120ghig" targetRef="Gateway_1w2e8qr" /> 
-    <task id="Activity_0fkht20"> 
-      <incoming>Flow_0s1uvcp</incoming> 
-      <outgoing>Flow_0fniklm</outgoing> 
-    </task> 
-    <sequenceFlow id="Flow_0s1uvcp" sourceRef="Gateway_1w2e8qr" targetRef="Activity_0fkht20" /> 
-    <sequenceFlow id="Flow_05ddike" sourceRef="Activity_0aai754" targetRef="Gateway_1ueoerv" /> 
-    <sequenceFlow id="Flow_0j1b3ve" sourceRef="Gateway_1w2e8qr" targetRef="Gateway_1ueoerv" /> 
-    <sequenceFlow id="Flow_0fniklm" sourceRef="Activity_0fkht20" targetRef="Gateway_1ueoerv" /> 
-    <parallelGateway id="Gateway_1ueoerv"> 
-      <incoming>Flow_05ddike</incoming> 
-      <incoming>Flow_0j1b3ve</incoming> 
-      <incoming>Flow_0fniklm</incoming> 
-    </parallelGateway> 
-    <parallelGateway id="Gateway_1w2e8qr"> 
-      <incoming>Flow_0ny7lm8</incoming> 
-      <outgoing>Flow_0s1uvcp</outgoing> 
-      <outgoing>Flow_0j1b3ve</outgoing> 
-    </parallelGateway> 
-  </process> 
-  <bpmndi:BPMNDiagram id="BpmnDiagram_1"> 
-    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn"> 
-      <bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> 
-        <omgdc:Bounds x="245" y="135" width="50" height="50" /> 
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig"> 
-        <omgdc:Bounds x="320" y="230" width="100" height="80" /> 
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20"> 
-        <omgdc:Bounds x="560" y="230" width="100" height="80" /> 
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv"> 
-        <omgdc:Bounds x="585" y="135" width="50" height="50" /> 
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Gateway_15jfxiy_di" bpmnElement="Gateway_1w2e8qr"> 
-        <omgdc:Bounds x="465" y="245" width="50" height="50" /> 
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754"> 
-        <omgdc:Bounds x="320" y="50" width="100" height="80" /> 
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs"> 
-        <omgdi:waypoint x="270" y="135" /> 
-        <omgdi:waypoint x="270" y="90" /> 
-        <omgdi:waypoint x="320" y="90" /> 
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n"> 
-        <omgdi:waypoint x="270" y="185" /> 
-        <omgdi:waypoint x="270" y="270" /> 
-        <omgdi:waypoint x="320" y="270" /> 
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_0ny7lm8_di" bpmnElement="Flow_0ny7lm8"> 
-        <omgdi:waypoint x="420" y="270" /> 
-        <omgdi:waypoint x="465" y="270" /> 
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_0s1uvcp_di" bpmnElement="Flow_0s1uvcp"> 
-        <omgdi:waypoint x="515" y="270" /> 
-        <omgdi:waypoint x="560" y="270" /> 
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike"> 
-        <omgdi:waypoint x="420" y="90" /> 
-        <omgdi:waypoint x="610" y="90" /> 
-        <omgdi:waypoint x="610" y="135" /> 
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_0j1b3ve_di" bpmnElement="Flow_0j1b3ve"> 
-        <omgdi:waypoint x="490" y="245" /> 
-        <omgdi:waypoint x="490" y="160" /> 
-        <omgdi:waypoint x="585" y="160" /> 
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_0fniklm_di" bpmnElement="Flow_0fniklm"> 
-        <omgdi:waypoint x="610" y="230" /> 
-        <omgdi:waypoint x="610" y="185" /> 
-      </bpmndi:BPMNEdge> 
-    </bpmndi:BPMNPlane> 
-  </bpmndi:BPMNDiagram> 
-</definitions> 
-</bpmnio> 
 ===== Notes ===== ===== Notes =====
  
-In software development, [[wpen>Structured programming]] is the fundamental set of rules +In software development, [[wp>Structured programming]] is the fundamental set of rules 
 that make it easier to understand the program code, reduce the number of errors, simplify testing and subsequent modification. that make it easier to understand the program code, reduce the number of errors, simplify testing and subsequent modification.
 Structured programming prohibits arbitrary transfer of control (goto operator), Structured programming prohibits arbitrary transfer of control (goto operator),
Line 514: Line 416:
 Therefore, the principles of structured programming should be applied to process modeling with certain adjustments: Therefore, the principles of structured programming should be applied to process modeling with certain adjustments:
  
-* the palette of structural blocks is wider, see [[#how to]] +  * the palette of structural blocks is wider, see [[#How to]] 
-* the sequence flow (if not part of a structural block) is the equivalento of goto +  * the sequence flow (if not part of a structural block) is the equivalento of goto 
-* as in structured programming, blocks can be nested +  * as in structured programming, blocks can be nested 
-* as in structured programming, processes should be modeled from top to bottom using subprocesses and call activities+  * as in structured programming, processes should be modeled from top to bottom using subprocesses and call activities
  
 Unlike programming, the principles of structured modeling are rather recommendations than requirements. Unlike programming, the principles of structured modeling are rather recommendations than requirements.
-There are scenarios when it's reasonable to break them to display complex logic, make the process diagram more compact and understandable, see [[#exceptions]].+There are scenarios when it's reasonable to break them to display complex logic, make the process diagram more compact and understandable, see [[#Exceptions]].
 The principles of structured modeling form a kind of "safe zone": as long as a process modeler follows them - The principles of structured modeling form a kind of "safe zone": as long as a process modeler follows them -
 in particular, pair each diverging gateway with a convergin one and firmly nest blocks one into another - one can be sure that the diagram is correct. in particular, pair each diverging gateway with a convergin one and firmly nest blocks one into another - one can be sure that the diagram is correct.