Both sides previous revision Previous revision Next revision | Previous revision |
en:rule:structured_diagram [2024-08-25 21:52] – [Notes] Anatoly Belaychuk | en:rule:structured_diagram [2024-11-27 15:48] (current) – [✘ How NOT to] Anatoly Belaychuk |
---|
====== 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. |
</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), |
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. |