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:32] – [✘ How NOT to] 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 =====
  
-Фундаментом разработки программного обеспечения является [[wpru>Структурное программирование]] - +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. 
-Структурное программирование запрещает произвольную передачу управления (оператор goto),  +Structured programming prohibits arbitrary transfer of control (goto operator), 
-требуя компоновать программный код из структурных блоков (последовательность, ветвление, цикл), которые могут вкладываться друг в друга. +requiring the program code to be composed of structural blocks (sequence, selection, iteration). 
-Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции).+Structured programming also suggests top-down development with hierarchical decompositon into subroutines (procedures, functions).
  
-Модель бизнес-процесса тоже является своего рода "программой", но только не для компьютера, а для организации, и существующей в виде диаграммы, а не текста программного кода. +A business process model is also a kind of "program" - not for a computer, but for an organization. 
-Но проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны,  +It existing in the form of a diagram, not the text of the program code. 
-поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам.+But the problems of readability, ease of testing and subsequent modification are even more pressing for process models, 
 +since they must be understandable not only to professionals (as in the case of program code), but also to business people - process owners, performers and other stakeholders.
  
-Поэтому принципы структурного программирования следует применять и к моделированию процессов, с учетом некоторых особенностей:+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]] 
-  * аналогом 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, 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. 
-Бывают сценарии, когда от них можно отступить, если это позволяет адекватно отобразить сложную логику, сделать схему процесса более компактной и понятной, см. [[#исключения]]. +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 - 
-в частности, у каждой расходящейся развилки есть парная к ней сходящаяся, и развилки аккуратно вложены одна в другую - вы можете быть уверены, что схема корректна. +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. 
-Если приходится от этих принципах отступать, то ответственность за корректность и читаемость диаграммы полностью ложиться на вас, как на автора. +As soon as you break these rules, you accept the the responsibility for the correctness and readability of the diagram. 
-Такая гибкость является сильной стороной BPMN.+Such flexibility is the strength of BPMN.
  
-Для сравнения, в нотации BPEL принципы структурного моделирования реализованы жестко - отступить от них невозможно технически. +In comparison, the BPEL notation imposes the principles of structured modeling rigidly, making it technically impossible to break. 
-Например, если у расходящейся развилки нет парной сходящейся, то такая модель в этой нотации будет синтаксически некорректной. +For example, if a diverging gateway isn't followed by a paired converging one then such a model will be syntactically incorrect. 
-Из-за такой жесткости BPEL проиграл в популярности BPMN. +Because of such rigidity, BPEL lost in popularity to BPMN. 
-Оказалось, что авторы и пользователи графических схем процессов ценят возможность соединить потоком управления произвольные элементы на диаграмме. +It turned out that authors and users of graphical diagrams value the BPMN ability to connect arbitrary elements on the diagram with a sequence flow. 
-Главное не злоупотреблять этой возможностью.+The point is not to overuse this ability.
 ===== Exceptions ===== ===== Exceptions =====