Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Hi, Π₯Π°Π±Ρ€!

ΠΠ°ΡˆΠ°Ρ‚Π° компания Π΅ спСциализирана Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° софтуСрни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚ клас ERP, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π»ΡŠΠ²ΡΠΊΠΈΡΡ‚ дял сС Π·Π°Π΅ΠΌΠ° ΠΎΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ систСми с ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ количСство бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс Π² стил EDMS. Π‘ΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ вСрсии Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ са Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° JavaEE Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ СкспСримСнтирамС с микроуслуги. Π•Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡ‚Π΅ области Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ подсистСми, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ със съсСдни Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ са Π½ΠΈ създавали ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ Π³Π»Π°Π²ΠΎΠ±ΠΎΠ»ΠΈΠ΅, нСзависимо ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΈΡ‚Π΅ стиловС, Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ стСковС ΠΈ Ρ€Π°ΠΌΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, Π½ΠΎ напослСдък ΠΈΠΌΠ° Π½Π°ΠΏΡ€Π΅Π΄ΡŠΠΊ Π² Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Π’ прСдоставСната Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ статия Ρ‰Π΅ говоря Π·Π° ΠΎΠΏΠΈΡ‚Π° ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΈΡ‚Π΅ проучвания Π½Π° НПО ΠšΡ€ΠΈΡΡ‚Π° Π² опрСдСлСния Ρ€Π°ΠΉΠΎΠ½. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° просто Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с интСграцията ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° прилоТСния ΠΈ Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΊΡ€ΠΈΠ΅ Π·Π°Π΄ Ρ‚Π°Π·ΠΈ простота.

ΠžΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΆΠ΅Π½ΠΈΠ΅

ΠžΠΏΠΈΡΠ°Π½ΠΈΡ‚Π΅ Π² статията Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΈ ΠΈ тСхничСски Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ са ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΡ‚ ΠΌΠ΅Π½ Π½Π° Π±Π°Π·Π° Π»ΠΈΡ‡Π΅Π½ ΠΎΠΏΠΈΡ‚ Π² контСкста Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π΅Π·ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΠΈΡ€Π°Ρ‚ Π·Π° унивСрсалност ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ са ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ условия Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Какво ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ° BPM с Ρ‚ΠΎΠ²Π°?

Π—Π° Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ, трябва Π΄Π° сС Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π² спСцификата Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° част ΠΎΡ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π² Π½Π°ΡˆΠ°Ρ‚Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Π° систСма Π΅ въвСТданС Π½Π° Π΄Π°Π½Π½ΠΈ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· потрСбитСлски интСрфСйси, Ρ€ΡŠΡ‡Π½Π° ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ ΠΏΡ€Π΅Π· някакъв Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ Π² Π΄Ρ€ΡƒΠ³Π° систСма / Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ / Π°Ρ€Ρ…ΠΈΠ², Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΈ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° функция Π½Π° систСмата Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ бизнСс процСси.

Π—Π° удобство Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° "Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚" Π² комуникацията ΠΊΠ°Ρ‚ΠΎ някаква абстракция ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ ΠΎΡ‚ ΠΎΠ±Ρ‰ ΠΊΠ»ΡŽΡ‡, към ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС "ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ΅Π½" ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс.
Но ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° интСграцията? Π’ края Π½Π° ΠΊΡ€Π°ΠΈΡ‰Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° интСграция сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° систСмата, която Π΅ β€žΠ½Π°Ρ€ΡΠ·Π°Π½Π°β€œ Π½Π° части НЕ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π° ΠΏΠΎΠ΄ влияниС Π½Π° напълно Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ:

  • ΠΏΠΎΠ΄ влияниСто Π½Π° Π·Π°ΠΊΠΎΠ½Π° Π½Π° ΠšΠΎΠ½ΡƒΠ΅ΠΉ;
  • Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° подсистСми, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ;
  • ΠΏΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚Π°, въз основа Π½Π° Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ изисквания.

Има голямо ΠΈΠ·ΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅ Π΄Π° сС ΠΎΡ‚Π΄Π΅Π»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° основния Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс, Π·Π° Π΄Π° Π½Π΅ сС Π·Π°ΠΌΡŠΡ€ΡΡΠ²Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΈ Π΄Π° сС спСсти Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ нСобходимостта Π΄Π° сС Ρ€ΠΎΠ²ΠΈ Π² особСноститС Π½Π° архитСктурния ΠΏΠ΅ΠΉΠ·Π°ΠΆ Π½Π° систСмата. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° прСдимства, Π½ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° нССфСктивност:

  • Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с интСграцията ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС свСТда Π΄ΠΎ Π½Π°ΠΉ-проститС ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° синхронни повиквания ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π² ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° основния Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅ Π½Π° синхронната интСграция ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ);
  • ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ всС ΠΎΡ‰Π΅ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ²Π°Ρ‚ Π² основната бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изисква ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° подсистСма;
  • Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π²Π° интСграцията ΠΈ ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° я ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ работния процСс;
  • систСмата прСстава Π΄Π° бъдС Π΅Π΄Π½ΠΎ цяло ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° потрСбитСля, "ΡˆΠ΅Π²ΠΎΠ²Π΅Ρ‚Π΅" ΠΌΠ΅ΠΆΠ΄Ρƒ подсистСмитС стават Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΈ, появяват сС излишни потрСбитСлски ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Ρ‚ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΅Π΄Π½Π° подсистСма към Π΄Ρ€ΡƒΠ³Π°.

Π”Ρ€ΡƒΠ³ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ взаимодСйствия ΠΊΠ°Ρ‚ΠΎ Π½Π΅Ρ€Π°Π·Π΄Π΅Π»Π½Π° част ΠΎΡ‚ основната бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс. Π—Π° Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠ°Π·ΠΈΡ‚Π΅ изискванията Π·Π° умСния Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния ΠΎΡ‚ скок, ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ взаимодСйствия трябва Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° лСсно ΠΈ СстСствСно, с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°: ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ трябва Π΄Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΌΠΎΡ‰Π΅Π½, Π·Π° Π΄Π° прСдостави Π½Π° потрСбитСля Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡ‚ΠΎ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° бъдС прострСлян Π² ΠΊΡ€Π°ΠΊΠ°. Има ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ трябва Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π² контСкста Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π·Π° интСграция, Π½ΠΎ Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ трябва Π΄Π° мисли Π² Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Π°Ρ‚Π° си Ρ€Π°Π±ΠΎΡ‚Π°: Π³Ρ€Π°Π½ΠΈΡ†ΠΈ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, послСдоватСлност, атомарност, сигурност, ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅, Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° рСсурситС, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ½Π³, разпространСниС ΠΈ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° контСксти ΠΈ Ρ‚.Π½. НСобходимо Π΅ Π΄Π° сС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ°Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния доста прости шаблони Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° всички ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ Π²Π΅Ρ‡Π΅ са скрити. Π’Π΅Π·ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ трябва Π΄Π° са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ сигурни: бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° сС промСня ΠΌΠ½ΠΎΠ³ΠΎ чСсто, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° риска ΠΎΡ‚ въвСТданС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ трябва Π΄Π° останС Π½Π° сравнитСлно ниско Π½ΠΈΠ²ΠΎ.

Но всС ΠΏΠ°ΠΊ, ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ° BPM с Ρ‚ΠΎΠ²Π°? Има ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° внСдряванС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс ...
Наистина, Π΄Ρ€ΡƒΠ³Π° рСализация Π½Π° бизнСс процСси Π΅ ΠΌΠ½ΠΎΠ³ΠΎ популярна Π² Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ - Ρ‡Ρ€Π΅Π· Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Π° настройка Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ с бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° към ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ опрСдСля Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° позиция Π½Π° "Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°" Π² бизнСс процСса, Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° самия "Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚".

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил
Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° внСдряванС сС дълТи Π½Π° относитСлната простота ΠΈ скорост Π½Π° създаванС Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΈ бизнСс процСси. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ софтуСрнитС систСми стават ΠΏΠΎ-слоТни, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π°Ρ‚Π° част ΠΎΡ‚ бизнСс процСса нараства ΠΈ става ΠΏΠΎ-слоТна. Има Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ дСкомпозиция, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° части ΠΎΡ‚ процСси, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ разклоняващи процСси, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всСки ΠΊΠ»ΠΎΠ½ Π΄Π° сС изпълнява ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΈΠ²Π° условия ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ става Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π³ΡƒΠ±ΠΈ своСто ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ (ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ взаимодСйствия ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ сС отразяват Π² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°).

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил
Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ слСд няколко повторСния Π½Π° изясняванС Π½Π° изискванията

Π˜Π·Ρ…ΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ ситуация бСшС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° двигатСля jBPM Π² някои ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ с Π½Π°ΠΉ-слоТни бизнСс процСси. Π’ краткосрочСн ΠΏΠ»Π°Π½ Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ имашС извСстСн успСх: стана възмоТно Π΄Π° сС внСдряват слоТни бизнСс процСси, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° доста ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Π° ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π² нотацията BPMN2.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил
Малка част ΠΎΡ‚ слоТСн бизнСс процСс

Π’ Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π΅Π½ ΠΏΠ»Π°Π½ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π° очакванията: високата трудоСмкост Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° бизнСс процСси Ρ‡Ρ€Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΈ инструмСнти Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ постиганСто Π½Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π·Π° производитСлност, Π° самият инструмСнт стана Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-нСхарСсванитС срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. ИмашС ΠΈ оплаквания относно Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° структура Π½Π° двигатСля, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ появата Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ β€žΠΊΡ€ΡŠΠΏΠΊΠΈβ€œ ΠΈ β€žΠΏΠ°Ρ‚Π΅Ρ€ΠΈΡ†ΠΈβ€œ.

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ аспСкт ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° jBPM бСшС ΠΎΡΡŠΠ·Π½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»Π·ΠΈΡ‚Π΅ ΠΈ Π²Ρ€Π΅Π΄ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° собствСно постоянно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π·Π° СкзСмпляр Π½Π° бизнСс процСс. ВидяхмС ΡΡŠΡ‰ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° процСсСн ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° слоТни ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ асинхронни взаимодСйствия Ρ‡Ρ€Π΅Π· сигнали ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. НаличиСто Π½Π° пСрсистиращо ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈΠ³Ρ€Π°Π΅ Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰Π° роля Π² Ρ‚ΠΎΠ²Π°.

Π’ΡŠΠ· основа Π½Π° Π³ΠΎΡ€Π½ΠΎΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠΌ: ΠŸΡ€ΠΎΡ†Π΅ΡΠ½ΠΈΡΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² стила Π½Π° BPM Π½ΠΈ позволява Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π°ΠΌΠ΅ ΡˆΠΈΡ€ΠΎΠΊ ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° всС ΠΏΠΎ-слоТни бизнСс процСси, Ρ…Π°Ρ€ΠΌΠΎΠ½ΠΈΡ‡Π½ΠΎ вписванС Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ дСйности Π² Ρ‚Π΅Π·ΠΈ процСси ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° способността Π·Π° Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° внСдрСния процСс Π² подходяща нотация.

ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π½Π° синхроннитС повиквания ΠΊΠ°Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΌΠΎΠ΄Π΅Π»

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Π°Ρ‚Π° интСграция сС отнася Π΄ΠΎ Π½Π°ΠΉ-простото Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅. Π•Π΄Π½Π° подсистСма дСйства ΠΊΠ°Ρ‚ΠΎ страна Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ ΠΈΠ·Π»Π°Π³Π° API с ТСлания ΠΌΠ΅Ρ‚ΠΎΠ΄. Π”Ρ€ΡƒΠ³Π° подсистСма дСйства ΠΊΠ°Ρ‚ΠΎ страна Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π² точния ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ с ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. Π’ зависимост ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° систСмата, клиСнтската ΠΈ ΡΡŠΡ€Π²ΡŠΡ€Π½Π°Ρ‚Π° страна ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ хоствани ΠΈΠ»ΠΈ Π² Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ процСс, ΠΈΠ»ΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ. Π’ΡŠΠ² втория случай трябва Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ някаква рСализация Π½Π° RPC ΠΈ Π΄Π° осигуритС ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ½Π³ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Вакъв ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΌΠΎΠ΄Π΅Π» ΠΈΠΌΠ° доста голям Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ, Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΡ€Π°Π΄ΠΈ своята простота. Бкоростта Π½Π° внСдряванС плСнява ΠΈ Π²ΠΈ ΠΊΠ°Ρ€Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π² условията Π½Π° "изгарящи" сроковС, записвайки Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² тСхничСски дълг. Но ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС случва Π½Π΅ΠΎΠΏΠΈΡ‚Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π΅ΡΡŠΠ·Π½Π°Ρ‚Π΅Π»Π½ΠΎ, просто Π½Π΅ осъзнавайки Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ послСдици.

Π’ допълнСниС към Π½Π°ΠΉ-ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° подсистСмитС, ΠΈΠΌΠ° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с β€žΡ€Π°Π·ΠΏΡ€ΡŠΡΠΊΠ²Π°Π½Π΅Ρ‚ΠΎβ€œ ΠΈ β€žΡ€Π°Π·Ρ‚ΡΠ³Π°Π½Π΅Ρ‚ΠΎβ€œ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π°ΠΊΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΏΡ€Π°Π²ΠΈ някакви ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ са Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΈ, Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΎΡ‚ своя страна Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ рСсурси Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, засСгнати ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. ВоСст, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΅Π΄Π½Π° подсистСма Π½Π΅ ΠΈΠ·Ρ‡Π°ΠΊΠ° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, тя няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ транзакцията ΠΈ Π΄Π° освободи ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ. Π’ΠΎΠ²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° риска ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈ:

  • отзивчивостта Π½Π° систСмата сС Π³ΡƒΠ±ΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Ρ‡Π°ΠΊΠ°Ρ‚ дълго Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° заявки;
  • ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ спира Π΄Π° отговаря Π½Π° потрСбитСлски заявки ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Ρ‰ ΠΏΡƒΠ» ΠΎΡ‚ нишки: ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ β€žΡΡ‚ΠΎΡΡ‚β€œ Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π° Π½Π° рСсурса, Π·Π°Π΅Ρ‚ ΠΎΡ‚ транзакцията;
  • Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° сС появяват задънСни Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ: вСроятността Π·Π° тяхното възникванС силно зависи ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, количСството бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² транзакцията;
  • появяват сС Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° транзакцията;
  • ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ "ΠΏΠ°Π΄Π°" Π½Π° OutOfMemory, Π°ΠΊΠΎ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° изисква ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ промяна Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ количСства Π΄Π°Π½Π½ΠΈ, Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° синхронни ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ раздСлянСто Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° "ΠΏΠΎ-Π»Π΅ΠΊΠΈ" Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

ΠžΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Π° Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΈ повиквания ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° интСграция Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π°Π³ΡƒΠ±Π° Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° качСството Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ подсистСми: нСвъзмоТно Π΅ Π΄Π° сС постигнат Ρ†Π΅Π»ΠΈ Π·Π° качСство Π·Π° Π΅Π΄Π½Π° подсистСма ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΎ ΠΎΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π·Π° качСство Π·Π° Π΄Ρ€ΡƒΠ³Π° подсистСма. Ако подсистСмитС сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅ΠΊΠΈΠΏΠΈ, Ρ‚ΠΎΠ²Π° Π΅ голям ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

НСщата стават ΠΎΡ‰Π΅ ΠΏΠΎ-интСрСсни, Π°ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ подсистСми са Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния ΠΈ трябва Π΄Π° сС правят синхронни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΡ‚ Π΄Π²Π΅Ρ‚Π΅ страни. Как Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ?

Ако сС правят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ трябва Π΄Π° сС осигури стабилна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ компСнсация ΠΈ Ρ‚ΠΎΠ²Π° напълно Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° основното прСдимство Π½Π° синхроннитС ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ - простотата.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠ΄Π²Π°Ρ‚ Π½Π° ΡƒΠΌ, Π½ΠΎ Π½ΠΈΠ΅ Π½Π΅ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΅ Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° надСТдност.

"Π‘Π°Π³Π°" ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅

Π‘ нарастващата популярност Π½Π° микроуслугитС, ΠΈΠΌΠ° нарастващо Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° МодСл Π½Π° сагата.

Π’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π΅ΡˆΠ°Π²Π° Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π΄ΡŠΠ»Π³ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° систСмата ΠΎΡ‚ страна Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°: компСнсацията слСд Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° транзакция ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π²ΡŠΡ€Π½Π΅ систСмата Π΄ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ ΠΉ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, Π½ΠΎ Π΄Π° прСдостави Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° Π²ΠΈ позволява Π΄Π° Π½Π΅ повтарятС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚Π΅ процСса Π΄ΠΎ β€žΠ΄ΠΎΠ±ΡŠΡ€β€œ ΠΊΡ€Π°ΠΉ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΈΡ‚Π΅ систСми Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» Π΅ умСстСн ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° слабо ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ подсистСми ΠΈ ΠΈΠΌΠ° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈ, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ дълги Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° рСсурси.

По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ бизнСс процСси Π² стил BPM сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ лСсно Π΄Π° сС внСдрят Sagas: ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ ΡΡ‚ΡŠΠΏΠΊΠΈ Π½Π° Sagas ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ дСйности Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° бизнСс процСса, Π° постоянното ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° бизнСс процСса опрСдСля, ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° сагитС. ВоСст нямамС Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ. Всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅, Π΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ β€žΠΏΠΎΠ½Π΅ Π²Π΅Π΄Π½ΡŠΠΆβ€œ ΠΊΠ°Ρ‚ΠΎ транспорт.

Но Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ° ΠΈ своя собствСна "Ρ†Π΅Π½Π°":

  • бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° става ΠΏΠΎ-слоТна: трябва Π΄Π° ΠΈΠ·Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ компСнсация;
  • Ρ‰Π΅ бъдС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС изостави ΠΏΡŠΠ»Π½Π°Ρ‚Π° послСдоватСлност, която ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС особСно чувствитСлна Π·Π° ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΈ систСми;
  • Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° става ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТна, ΠΈΠΌΠ° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ;
  • Ρ‰Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ инструмСнти Π·Π° наблюдСниС ΠΈ администриранС (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ цяло Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΡ€ΠΈ Π΄ΠΎΠ±Ρ€Π΅: качСството Π½Π° систСмната услуга Ρ‰Π΅ сС повиши).

Π—Π° ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΈ систСми ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° "Sags" Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. Π—Π° микроуслуги ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ SOA, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π°ΠΉ-вСроятно Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΈ ΠΏΡŠΠ»Π½Π°Ρ‚Π° послСдоватСлност Π΅ ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²Π°Π½Π° Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ»Π·ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΌΠΎΠ³Π°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π½Π°Π΄Ρ…Π²ΡŠΡ€Π»ΡΡ‚ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅, особСно Π°ΠΊΠΎ ΠΈΠΌΠ° ΡƒΠ΄ΠΎΠ±Π΅Π½ API Π² Π½ΠΈΠ²ΠΎ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°.

ΠšΠ°ΠΏΡΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π² микроуслуги

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° СкспСримСнтирамС с микроуслуги, възникна Ρ€Π°Π·ΡƒΠΌΠ΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ: къдС Π΄Π° поставим бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° във Π²Ρ€ΡŠΠ·ΠΊΠ° с услугата, която осигурява устойчивост Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°?

ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ BPMS, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΠΌ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΎΡ‚ постоянството: ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ слой ΠΎΡ‚ нСзависими ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° микроуслуги, ΠΊΠΎΠΈΡ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ‚ срСдата ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° изпълнСниС Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°, ΠΈ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Ρ‚Π΅ постоянството Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ слой ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ прости ΠΈ Π»Π΅ΠΊΠΈ микроуслуги. БизнСс процСситС Π² Ρ‚ΠΎΠ·ΠΈ случай ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚ услугитС Π½Π° слоя Π·Π° устойчивост.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ голям плюс: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅ функционалността Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ искатС ΠΈ само ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ слой ΠΎΡ‚ микроуслуги Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ‰Π΅ β€žΠ½Π°ΠΏΡŠΠ»Π½Π΅Π΅β€œ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°. БизнСс процСситС ΠΎΡ‚ всСки Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π²Π΅Π΄Π½Π°Π³Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½ΠΎΠ²Π°Ρ‚Π° функционалност Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π²Π΅Π΄Π½Π°Π³Π° слСд Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅.

По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ Ρ€Π°Π·ΠΊΡ€ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

  • услуга Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, която изпълнява бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ навСднъТ, носи Π³ΠΎΠ»Π΅ΠΌΠΈ рисковС ΠΊΠ°Ρ‚ΠΎ Π΅Π΄Π½Π° СдинствСна Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°. ЧСститС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‚ риска ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ, Π²ΠΎΠ΄Π΅Ρ‰ΠΈ Π΄ΠΎ сривовС Π² цялата систСма;
  • ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с производитСлността: бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ със своитС Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· тСсСн ΠΈ Π±Π°Π²Π΅Π½ интСрфСйс:
    • Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΈ ΠΈΠ·ΠΏΠΎΠΌΠΏΠ²Π°Π½ΠΈ ΠΏΡ€Π΅Π· мрСТовия стСк;
    • услугата Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° чСсто Ρ‰Π΅ Π²Ρ€ΡŠΡ‰Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π΄Π°Π½Π½ΠΈ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° изисква Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° заявката Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° външния API Π½Π° услугата;
    • няколко нСзависими части ΠΎΡ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π΄Π° изискват Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° смСкчитС Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ сСсийни ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‚ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ услоТнява Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ΠΈ създава ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с актуалността Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ Π°Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° кСша);
  • Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:
    • бизнСс процСситС с постоянно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ ΠΎΡ‚ услугата Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π½Π΅ са Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΈ няма лСсни Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ;
    • прСмСстванС Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° извън транзакцията: Π°ΠΊΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, слСд ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ корСктността Π½Π° дСйствитСлнитС Π΄Π°Π½Π½ΠΈ, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Π° промяна Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. Π’ΡŠΠ½ΡˆΠ½ΠΎΡ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ носи Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ рисковС ΠΈ намалява цялостната надСТдност Π½Π° систСмата;
  • Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ услоТнСния ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅: Π² някои случаи трябва Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ услугата Π·Π° постоянство ΠΈ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° синхронно ΠΈΠ»ΠΈ Π² строга послСдоватСлност.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС Π²ΡŠΡ€Π½Π° към основитС: Π΄Π° капсулирам Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΈ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° Π² Π΅Π΄Π½Π° микроуслуга. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ опростява Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅Ρ‚ΠΎ Π½Π° микроуслугата ΠΊΠ°Ρ‚ΠΎ Π½Π΅Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² систСмата ΠΈ Π½Π΅ ΠΏΠΎΡ€Π°ΠΆΠ΄Π° Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π’ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ Π½Π΅ Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ:

  • Бтандартизацията Π½Π° API Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° взаимодСйствиС с бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° (ΠΏΠΎ-спСциално, Π·Π° прСдоставянС Π½Π° потрСбитСлски дСйности ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ бизнСс процСси) ΠΈ услугитС Π½Π° API ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°; изисква сС ΠΏΠΎ-Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ към ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² API, ΠΏΡ€Π΅Π΄Π½Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚;
  • изисква сС добавянС Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ runtime Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π·Π° Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ всяка Ρ‚Π°ΠΊΠ°Π²Π° микроуслуга, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΡ€Π°ΠΆΠ΄Π° Π½ΠΎΠ²ΠΈ изисквания към Ρ‚Π°ΠΊΠΈΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: Π»Π΅ΠΊΠΎΡ‚Π° ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π½ΠΈ зависимости;
  • Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° трябва Π΄Π° слСдят вСрсиитС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅: Π°ΠΊΠΎ Π΄Π°Π΄Π΅Π½Π° микроуслуга Π½Π΅ Π΅ Ρ„ΠΈΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° дълго Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΠΎΠ³Π°Π²Π° Π½Π°ΠΉ-вСроятно Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° остаряла вСрсия Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΎ прСпятствиС Π·Π° добавянС Π½Π° Π½ΠΎΠ²Π° функция ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° изисква старата бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Ρ‚Π°ΠΊΠ°Π²Π° услуга Π΄Π° бъдС ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π° към Π½ΠΎΠ²ΠΈ вСрсии Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, Π°ΠΊΠΎ Π΅ ΠΈΠΌΠ°Π»ΠΎ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиитС.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Π‘Π»ΠΎΠΉ ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½ΠΈ услуги ΡΡŠΡ‰ΠΎ ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° Π² Ρ‚Π°ΠΊΠ°Π²Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ слой Π²Π΅Ρ‡Π΅ Π½Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π° изпълнСниС Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°, Π° само Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° срСда, осигурявайки спомагатСлни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° "ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°". Вакъв слой Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π΅ само Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° Π»Π΅ΠΊΠΎΡ‚Π°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ микроуслугитС, Π½ΠΎ ΠΈ Π·Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

НапримСр дСйноститС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π² бизнСс процСситС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ със Π·Π°Π΄Π°Ρ‡ΠΈ, потрСбитСлят трябва Π΄Π° Π²ΠΈΠΆΠ΄Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚ всички Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π² общия списък, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ трябва Π΄Π° ΠΈΠΌΠ° подходяща услуга Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° рСгистрация Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ, изчистСна ΠΎΡ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅Ρ‚ΠΎ Π½Π° капсулиранСто Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π² Ρ‚ΠΎΠ·ΠΈ контСкст Π΅ доста ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π΄Ρ€ΡƒΠ³ компромис Π½Π° Ρ‚Π°Π·ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° бизнСс процСси ΠΏΡ€Π΅Π· ΠΏΠΎΠ³Π»Π΅Π΄Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° прилоТСния

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бСшС спомСнато ΠΏΠΎ-Π³ΠΎΡ€Π΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ трябва Π΄Π° сС абстрахира ΠΎΡ‚ тСхничСскитС ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΈ характСристики Π½Π° рСализацията Π½Π° взаимодСйствиСто Π½Π° няколко прилоТСния, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° Π΄ΠΎΠ±Ρ€Π° производитСлност Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°.

НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Π΅Π΄ΠΈΠ½ доста Ρ‚Ρ€ΡƒΠ΄Π΅Π½ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, спСциално измислСн Π·Π° статията. Π’ΠΎΠ²Π° Ρ‰Π΅ бъдС "ΠΈΠ³Ρ€Π°" Π·Π°Π΄Π°Ρ‡Π°, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰Π° Ρ‚Ρ€ΠΈ прилоТСния, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ всяко ΠΎΡ‚ тях Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½: "app1", "app2", "app3".

Π’ΡŠΡ‚Ρ€Π΅ във всяко ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сС стартират бизнСс процСси, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° β€žΠΈΠ³Ρ€Π°ΡΡ‚ Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π°β€œ ΠΏΡ€Π΅Π· ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° шина. Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° с ΠΈΠΌΠ΅ β€žΠ’ΠΎΠΏΠΊΠ°β€œ Ρ‰Π΅ дСйстват ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π°.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π½Π° ΠΈΠ³Ρ€Π°Ρ‚Π°:

  • ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΈΠ³Ρ€Π°Ρ‡ Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€. Π’ΠΎΠΉ ΠΊΠ°Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ³Ρ€Π°Ρ‡ΠΈ Π² ΠΈΠ³Ρ€Π°Ρ‚Π°, Π·Π°ΠΏΠΎΡ‡Π²Π° ΠΈΠ³Ρ€Π°Ρ‚Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° я ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅;
  • Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ³Ρ€Π°Ρ‡ΠΈ заявяват участиСто си Π² ΠΈΠ³Ρ€Π°Ρ‚Π°, β€žΠ·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ ΡΠ΅β€œ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ с ΠΏΡŠΡ€Π²ΠΈΡ ΠΈΠ³Ρ€Π°Ρ‡;
  • слСд ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π°, ΠΈΠ³Ρ€Π°Ρ‡ΡŠΡ‚ ΠΈΠ·Π±ΠΈΡ€Π° Π΄Ρ€ΡƒΠ³ участващ ΠΈΠ³Ρ€Π°Ρ‡ ΠΈ ΠΌΡƒ ΠΏΠΎΠ΄Π°Π²Π° Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π°. ΠžΡ‚Ρ‡ΠΈΡ‚Π° сС общият Π±Ρ€ΠΎΠΉ пропуски;
  • всСки ΠΈΠ³Ρ€Π°Ρ‡ ΠΈΠΌΠ° "СнСргия", която намалява с всяко ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π° ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ³Ρ€Π°Ρ‡. ΠšΠΎΠ³Π°Ρ‚ΠΎ СнСргията ΡΠ²ΡŠΡ€ΡˆΠΈ, ΠΈΠ³Ρ€Π°Ρ‡ΡŠΡ‚ сС Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° ΠΎΡ‚ ΠΈΠ³Ρ€Π°Ρ‚Π°, обявявайки пСнсиониранСто си;
  • Π°ΠΊΠΎ ΠΈΠ³Ρ€Π°Ρ‡ΡŠΡ‚ останС сам, Ρ‚ΠΎΠΉ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ обявява напусканСто си;
  • ΠΊΠΎΠ³Π°Ρ‚ΠΎ всички ΠΈΠ³Ρ€Π°Ρ‡ΠΈ са Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π½ΠΈ, ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΈΠ³Ρ€Π°Ρ‡ обявява края Π½Π° ΠΈΠ³Ρ€Π°Ρ‚Π°. Ако Π΅ напуснал ΠΈΠ³Ρ€Π°Ρ‚Π° ΠΏΠΎ-Ρ€Π°Π½ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° остава Π΄Π° прослСди ΠΈΠ³Ρ€Π°Ρ‚Π°, Π·Π° Π΄Π° я Π·Π°Π²ΡŠΡ€ΡˆΠΈ.

Π—Π° Π΄Π° Ρ€Π΅ΡˆΠ° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ нашия DSL Π·Π° бизнСс процСси, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π² Kotlin ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ, с ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ шаблон.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ app1 бизнСс ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ ΠΈΠ³Ρ€Π°Ρ‡ (Ρ‚ΠΎΠΉ Π΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΈΠ³Ρ€Π°Ρ‚Π°) Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ:

клас InitialPlayer

import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.constraint.UniqueConstraints
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.dsl.taskOperation
import ru.krista.bpm.runtime.instance.MessageSendInstance

data class PlayerInfo(val name: String, val domain: String, val id: String)

class PlayersList : ArrayList<PlayerInfo>()

// Π­Ρ‚ΠΎ класс экзСмпляра процСсса: инкапсулируСт Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС
class InitialPlayer : ProcessImpl<InitialPlayer>(initialPlayerModel) {
    var playerName: String by persistent("Player1")
    var energy: Int by persistent(30)
    var players: PlayersList by persistent(PlayersList())
    var shotCounter: Int = 0
}

// Π­Ρ‚ΠΎ дСкларация ΠΌΠΎΠ΄Π΅Π»ΠΈ процСсса: создаСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми
// экзСмплярами процСсса ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса
val initialPlayerModel = processModel<InitialPlayer>(name = "InitialPlayer",
                                                     version = 1) {

    // По ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠΊ являСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ СдинствСнным
    uniqueConstraint = UniqueConstraints.singleton

    // ОбъявляСм активности, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит бизнСс-процСсс
    val sendNewGameSignal = signal<String>("NewGame")
    val sendStopGameSignal = signal<String>("StopGame")
    val startTask = humanTask("Start") {
        taskOperation {
            processCondition { players.size > 0 }
            confirmation { "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΎΡΡŒ ${players.size} ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². НачинаСм?" }
        }
    }
    val stopTask = humanTask("Stop") {
        taskOperation {}
    }
    val waitPlayerJoin = signalWait<String>("PlayerJoin") { signal ->
        players.add(PlayerInfo(
                signal.data!!,
                signal.sender.domain,
                signal.sender.processInstanceId))
        println("... join player ${signal.data} ...")
    }
    val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
        players.remove(PlayerInfo(
                signal.data!!,
                signal.sender.domain,
                signal.sender.processInstanceId))
        println("... player ${signal.data} is out ...")
    }
    val sendPlayerOut = signal<String>("PlayerOut") {
        signalData = { playerName }
    }
    val sendHandshake = messageSend<String>("Handshake") {
        messageData = { playerName }
        activation = {
            receiverDomain = process.players.last().domain
            receiverProcessInstanceId = process.players.last().id
        }
    }
    val throwStartBall = messageSend<Int>("Ball") {
        messageData = { 1 }
        activation = { selectNextPlayer() }
    }
    val throwBall = messageSend<Int>("Ball") {
        messageData = { shotCounter + 1 }
        activation = { selectNextPlayer() }
        onEntry { energy -= 1 }
    }
    val waitBall = messageWaitData<Int>("Ball") {
        shotCounter = it
    }

    // Π’Π΅ΠΏΠ΅Ρ€ΡŒ конструируСм Π³Ρ€Π°Ρ„ процСсса ΠΈΠ· ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… активностСй
    startFrom(sendNewGameSignal)
            .fork("mainFork") {
                next(startTask)
                next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
                next(waitPlayerOut)
                        .branch("checkPlayers") {
                            ifTrue { players.isEmpty() }
                                    .next(sendStopGameSignal)
                                    .terminate()
                            ifElse().next(waitPlayerOut)
                        }
            }
    startTask.fork("afterStart") {
        next(throwStartBall)
                .branch("mainLoop") {
                    ifTrue { energy < 5 }.next(sendPlayerOut).next(waitBall)
                    ifElse().next(waitBall).next(throwBall).loop()
                }
        next(stopTask).next(sendStopGameSignal)
    }

    // НавСшаСм Π½Π° активности Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ для логирования
    sendNewGameSignal.onExit { println("Let's play!") }
    sendStopGameSignal.onExit { println("Stop!") }
    sendPlayerOut.onExit { println("$playerName: I'm out!") }
}

private fun MessageSendInstance<InitialPlayer, Int>.selectNextPlayer() {
    val player = process.players.random()
    receiverDomain = player.domain
    receiverProcessInstanceId = player.id
    println("Step ${process.shotCounter + 1}: " +
            "${process.playerName} >>> ${player.name}")
}

Π’ допълнСниС към ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°, горният ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° създадС ΠΎΠ±Π΅ΠΊΡ‚Π΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° бизнСс процСс, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°. ВсС ΠΎΡ‰Π΅ Π½Π΅ смС Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΠΌ извСстно Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Ρ‡Π΅Ρ€Ρ‚Π°Π½Π΅ (Ρ‚ΡƒΠΊ Π»Π΅ΠΊΠΎ опростих нотацията Π½Π° BPMN ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²Ρ€Π°Ρ‚ΠΈ, Π·Π° Π΄Π° подобря ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° с горния ΠΊΠΎΠ΄):

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

app2 Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° бизнСс процСс Π½Π° Π΄Ρ€ΡƒΠ³ ΠΈΠ³Ρ€Π°Ρ‡:

клас RandomPlayer

import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance

data class PlayerInfo(val name: String, val domain: String, val id: String)

class PlayersList: ArrayList<PlayerInfo>()

class RandomPlayer : ProcessImpl<RandomPlayer>(randomPlayerModel) {

    var playerName: String by input(persistent = true, 
                                    defaultValue = "RandomPlayer")
    var energy: Int by input(persistent = true, defaultValue = 30)
    var players: PlayersList by persistent(PlayersList())
    var allPlayersOut: Boolean by persistent(false)
    var shotCounter: Int = 0

    val selfPlayer: PlayerInfo
        get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}

val randomPlayerModel = processModel<RandomPlayer>(name = "RandomPlayer", 
                                                   version = 1) {

    val waitNewGameSignal = signalWait<String>("NewGame")
    val waitStopGameSignal = signalWait<String>("StopGame")
    val sendPlayerJoin = signal<String>("PlayerJoin") {
        signalData = { playerName }
    }
    val sendPlayerOut = signal<String>("PlayerOut") {
        signalData = { playerName }
    }
    val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
        eventCondition = { signal ->
            signal.sender.processInstanceId != process.id 
                && !process.players.any { signal.sender.processInstanceId == it.id}
        }
        handler = { signal ->
            players.add(PlayerInfo(
                    signal.data!!,
                    signal.sender.domain,
                    signal.sender.processInstanceId))
        }
    }
    val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
        players.remove(PlayerInfo(
                signal.data!!,
                signal.sender.domain,
                signal.sender.processInstanceId))
        allPlayersOut = players.isEmpty()
    }
    val sendHandshake = messageSend<String>("Handshake") {
        messageData = { playerName }
        activation = {
            receiverDomain = process.players.last().domain
            receiverProcessInstanceId = process.players.last().id
        }
    }
    val receiveHandshake = messageWait<String>("Handshake") { message ->
        if (!players.any { message.sender.processInstanceId == it.id}) {
            players.add(PlayerInfo(
                    message.data!!, 
                    message.sender.domain, 
                    message.sender.processInstanceId))
        }
    }
    val throwBall = messageSend<Int>("Ball") {
        messageData = { shotCounter + 1 }
        activation = { selectNextPlayer() }
        onEntry { energy -= 1 }
    }
    val waitBall = messageWaitData<Int>("Ball") {
        shotCounter = it
    }

    startFrom(waitNewGameSignal)
            .fork("mainFork") {
                next(sendPlayerJoin)
                        .branch("mainLoop") {
                            ifTrue { energy < 5 || allPlayersOut }
                                    .next(sendPlayerOut)
                                    .next(waitBall)
                            ifElse()
                                    .next(waitBall)
                                    .next(throwBall)
                                    .loop()
                        }
                next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
                next(waitPlayerOut).next(waitPlayerOut)
                next(receiveHandshake).next(receiveHandshake)
                next(waitStopGameSignal).terminate()
            }

    sendPlayerJoin.onExit { println("$playerName: I'm here!") }
    sendPlayerOut.onExit { println("$playerName: I'm out!") }
}

private fun MessageSendInstance<RandomPlayer, Int>.selectNextPlayer() {
    val player = if (process.players.isNotEmpty()) 
        process.players.random() 
    else 
        process.selfPlayer
    receiverDomain = player.domain
    receiverProcessInstanceId = player.id
    println("Step ${process.shotCounter + 1}: " +
            "${process.playerName} >>> ${player.name}")
}

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠ°:

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ app3 Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΠ³Ρ€Π°Ρ‡Π° с ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: вмСсто Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ слСдващия ΠΈΠ³Ρ€Π°Ρ‡, Ρ‚ΠΎΠΉ Ρ‰Π΅ дСйства спорСд ΠΊΡ€ΡŠΠ³ΠΎΠ²ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ:

клас RoundRobinPlayer

import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance

data class PlayerInfo(val name: String, val domain: String, val id: String)

class PlayersList: ArrayList<PlayerInfo>()

class RoundRobinPlayer : ProcessImpl<RoundRobinPlayer>(roundRobinPlayerModel) {

    var playerName: String by input(persistent = true, 
                                    defaultValue = "RoundRobinPlayer")
    var energy: Int by input(persistent = true, defaultValue = 30)
    var players: PlayersList by persistent(PlayersList())
    var nextPlayerIndex: Int by persistent(-1)
    var allPlayersOut: Boolean by persistent(false)
    var shotCounter: Int = 0

    val selfPlayer: PlayerInfo
        get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}

val roundRobinPlayerModel = processModel<RoundRobinPlayer>(
        name = "RoundRobinPlayer", 
        version = 1) {

    val waitNewGameSignal = signalWait<String>("NewGame")
    val waitStopGameSignal = signalWait<String>("StopGame")
    val sendPlayerJoin = signal<String>("PlayerJoin") {
        signalData = { playerName }
    }
    val sendPlayerOut = signal<String>("PlayerOut") {
        signalData = { playerName }
    }
    val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
        eventCondition = { signal ->
            signal.sender.processInstanceId != process.id 
                && !process.players.any { signal.sender.processInstanceId == it.id}
        }
        handler = { signal ->
            players.add(PlayerInfo(
                    signal.data!!, 
                    signal.sender.domain, 
                    signal.sender.processInstanceId))
        }
    }
    val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
        players.remove(PlayerInfo(
                signal.data!!, 
                signal.sender.domain, 
                signal.sender.processInstanceId))
        allPlayersOut = players.isEmpty()
    }
    val sendHandshake = messageSend<String>("Handshake") {
        messageData = { playerName }
        activation = {
            receiverDomain = process.players.last().domain
            receiverProcessInstanceId = process.players.last().id
        }
    }
    val receiveHandshake = messageWait<String>("Handshake") { message ->
        if (!players.any { message.sender.processInstanceId == it.id}) {
            players.add(PlayerInfo(
                    message.data!!, 
                    message.sender.domain, 
                    message.sender.processInstanceId))
        }
    }
    val throwBall = messageSend<Int>("Ball") {
        messageData = { shotCounter + 1 }
        activation = { selectNextPlayer() }
        onEntry { energy -= 1 }
    }
    val waitBall = messageWaitData<Int>("Ball") {
        shotCounter = it
    }

    startFrom(waitNewGameSignal)
            .fork("mainFork") {
                next(sendPlayerJoin)
                        .branch("mainLoop") {
                            ifTrue { energy < 5 || allPlayersOut }
                                    .next(sendPlayerOut)
                                    .next(waitBall)
                            ifElse()
                                    .next(waitBall)
                                    .next(throwBall)
                                    .loop()
                        }
                next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
                next(waitPlayerOut).next(waitPlayerOut)
                next(receiveHandshake).next(receiveHandshake)
                next(waitStopGameSignal).terminate()
            }

    sendPlayerJoin.onExit { println("$playerName: I'm here!") }
    sendPlayerOut.onExit { println("$playerName: I'm out!") }
}

private fun MessageSendInstance<RoundRobinPlayer, Int>.selectNextPlayer() {
    var idx = process.nextPlayerIndex + 1
    if (idx >= process.players.size) {
        idx = 0
    }
    process.nextPlayerIndex = idx
    val player = if (process.players.isNotEmpty()) 
        process.players[idx] 
    else 
        process.selfPlayer
    receiverDomain = player.domain
    receiverProcessInstanceId = player.id
    println("Step ${process.shotCounter + 1}: " +
            "${process.playerName} >>> ${player.name}")
}

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ³Ρ€Π°Ρ‡Π° Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π΅ сС промСня.

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ тСст, Π·Π° Π΄Π° изпълним всичко. Π©Π΅ Π΄Π°ΠΌ само ΠΊΠΎΠ΄Π° Π½Π° самия тСст, Π·Π° Π΄Π° Π½Π΅ ΠΏΡ€Π΅Ρ‚Ρ€ΡƒΠΏΠ²Π°ΠΌ статията с шаблон (Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… тСстовата срСда, създадСна ΠΏΠΎ-Ρ€Π°Π½ΠΎ, Π·Π° Π΄Π° тСствам интСграцията Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ бизнСс процСси):

testGame()

@Test
public void testGame() throws InterruptedException {
    String pl2 = startProcess(app2, "RandomPlayer", playerParams("Player2", 20));
    String pl3 = startProcess(app2, "RandomPlayer", playerParams("Player3", 40));
    String pl4 = startProcess(app3, "RoundRobinPlayer", playerParams("Player4", 25));
    String pl5 = startProcess(app3, "RoundRobinPlayer", playerParams("Player5", 35));
    String pl1 = startProcess(app1, "InitialPlayer");
    // Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠΈ "познакомятся" Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.
    // Π–Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· sleep - ΠΏΠ»ΠΎΡ…ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π·Π°Ρ‚ΠΎ самоС простоС. 
    // НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ Π² ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… тСстах!
    Thread.sleep(1000);
    // ЗапускаСм ΠΈΠ³Ρ€Ρƒ, закрывая ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ
    assertTrue(closeTask(app1, pl1, "Start"));
    app1.getWaiting().waitProcessFinished(pl1);
    app2.getWaiting().waitProcessFinished(pl2);
    app2.getWaiting().waitProcessFinished(pl3);
    app3.getWaiting().waitProcessFinished(pl4);
    app3.getWaiting().waitProcessFinished(pl5);
}

private Map<String, Object> playerParams(String name, int energy) {
    Map<String, Object> params = new HashMap<>();
    params.put("playerName", name);
    params.put("energy", energy);
    return params;
}

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ тСста, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°:

ΠΊΠΎΠ½Π·ΠΎΠ»Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄

Взята Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π° lock://app1/process/InitialPlayer
Let's play!
Бнята Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π° lock://app1/process/InitialPlayer
Player2: I'm here!
Player3: I'm here!
Player4: I'm here!
Player5: I'm here!
... join player Player2 ...
... join player Player4 ...
... join player Player3 ...
... join player Player5 ...
Step 1: Player1 >>> Player3
Step 2: Player3 >>> Player5
Step 3: Player5 >>> Player3
Step 4: Player3 >>> Player4
Step 5: Player4 >>> Player3
Step 6: Player3 >>> Player4
Step 7: Player4 >>> Player5
Step 8: Player5 >>> Player2
Step 9: Player2 >>> Player5
Step 10: Player5 >>> Player4
Step 11: Player4 >>> Player2
Step 12: Player2 >>> Player4
Step 13: Player4 >>> Player1
Step 14: Player1 >>> Player4
Step 15: Player4 >>> Player3
Step 16: Player3 >>> Player1
Step 17: Player1 >>> Player2
Step 18: Player2 >>> Player3
Step 19: Player3 >>> Player1
Step 20: Player1 >>> Player5
Step 21: Player5 >>> Player1
Step 22: Player1 >>> Player2
Step 23: Player2 >>> Player4
Step 24: Player4 >>> Player5
Step 25: Player5 >>> Player3
Step 26: Player3 >>> Player4
Step 27: Player4 >>> Player2
Step 28: Player2 >>> Player5
Step 29: Player5 >>> Player2
Step 30: Player2 >>> Player1
Step 31: Player1 >>> Player3
Step 32: Player3 >>> Player4
Step 33: Player4 >>> Player1
Step 34: Player1 >>> Player3
Step 35: Player3 >>> Player4
Step 36: Player4 >>> Player3
Step 37: Player3 >>> Player2
Step 38: Player2 >>> Player5
Step 39: Player5 >>> Player4
Step 40: Player4 >>> Player5
Step 41: Player5 >>> Player1
Step 42: Player1 >>> Player5
Step 43: Player5 >>> Player3
Step 44: Player3 >>> Player5
Step 45: Player5 >>> Player2
Step 46: Player2 >>> Player3
Step 47: Player3 >>> Player2
Step 48: Player2 >>> Player5
Step 49: Player5 >>> Player4
Step 50: Player4 >>> Player2
Step 51: Player2 >>> Player5
Step 52: Player5 >>> Player1
Step 53: Player1 >>> Player5
Step 54: Player5 >>> Player3
Step 55: Player3 >>> Player5
Step 56: Player5 >>> Player2
Step 57: Player2 >>> Player1
Step 58: Player1 >>> Player4
Step 59: Player4 >>> Player1
Step 60: Player1 >>> Player4
Step 61: Player4 >>> Player3
Step 62: Player3 >>> Player2
Step 63: Player2 >>> Player5
Step 64: Player5 >>> Player4
Step 65: Player4 >>> Player5
Step 66: Player5 >>> Player1
Step 67: Player1 >>> Player5
Step 68: Player5 >>> Player3
Step 69: Player3 >>> Player4
Step 70: Player4 >>> Player2
Step 71: Player2 >>> Player5
Step 72: Player5 >>> Player2
Step 73: Player2 >>> Player1
Step 74: Player1 >>> Player4
Step 75: Player4 >>> Player1
Step 76: Player1 >>> Player2
Step 77: Player2 >>> Player5
Step 78: Player5 >>> Player4
Step 79: Player4 >>> Player3
Step 80: Player3 >>> Player1
Step 81: Player1 >>> Player5
Step 82: Player5 >>> Player1
Step 83: Player1 >>> Player4
Step 84: Player4 >>> Player5
Step 85: Player5 >>> Player3
Step 86: Player3 >>> Player5
Step 87: Player5 >>> Player2
Step 88: Player2 >>> Player3
Player2: I'm out!
Step 89: Player3 >>> Player4
... player Player2 is out ...
Step 90: Player4 >>> Player1
Step 91: Player1 >>> Player3
Step 92: Player3 >>> Player1
Step 93: Player1 >>> Player4
Step 94: Player4 >>> Player3
Step 95: Player3 >>> Player5
Step 96: Player5 >>> Player1
Step 97: Player1 >>> Player5
Step 98: Player5 >>> Player3
Step 99: Player3 >>> Player5
Step 100: Player5 >>> Player4
Step 101: Player4 >>> Player5
Player4: I'm out!
... player Player4 is out ...
Step 102: Player5 >>> Player1
Step 103: Player1 >>> Player3
Step 104: Player3 >>> Player1
Step 105: Player1 >>> Player3
Step 106: Player3 >>> Player5
Step 107: Player5 >>> Player3
Step 108: Player3 >>> Player1
Step 109: Player1 >>> Player3
Step 110: Player3 >>> Player5
Step 111: Player5 >>> Player1
Step 112: Player1 >>> Player3
Step 113: Player3 >>> Player5
Step 114: Player5 >>> Player3
Step 115: Player3 >>> Player1
Step 116: Player1 >>> Player3
Step 117: Player3 >>> Player5
Step 118: Player5 >>> Player1
Step 119: Player1 >>> Player3
Step 120: Player3 >>> Player5
Step 121: Player5 >>> Player3
Player5: I'm out!
... player Player5 is out ...
Step 122: Player3 >>> Player5
Step 123: Player5 >>> Player1
Player5: I'm out!
Step 124: Player1 >>> Player3
... player Player5 is out ...
Step 125: Player3 >>> Player1
Step 126: Player1 >>> Player3
Player1: I'm out!
... player Player1 is out ...
Step 127: Player3 >>> Player3
Player3: I'm out!
Step 128: Player3 >>> Player3
... player Player3 is out ...
Player3: I'm out!
Stop!
Step 129: Player3 >>> Player3
Player3: I'm out!

ΠžΡ‚ всичко Ρ‚ΠΎΠ²Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС направят няколко Π²Π°ΠΆΠ½ΠΈ ΠΈΠ·Π²ΠΎΠ΄Π°:

  • Π°ΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ инструмСнти са Π½Π°Π»ΠΈΡ‡Π½ΠΈ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСнията, Π±Π΅Π· Π΄Π° сС ΠΎΡ‚ΠΊΡŠΡΠ²Π°Ρ‚ ΠΎΡ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°;
  • слоТността (комплСксността) Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° Π·Π°Π΄Π°Ρ‡Π°, която изисква ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΈ ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС скрита Π²ΡŠΡ‚Ρ€Π΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ‚Π°, Π°ΠΊΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π΅ Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π°. Врудността Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° (трудността) Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС скрита, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€ΡƒΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° Π² ΠΊΠΎΠ΄Π° Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ;
  • ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π²Π·Π΅ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΅Π²Π΅Π½Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° послСдоватСлност ΠΈ липсата Π½Π° линСаризация Π½Π° промяната Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° всички участници Π² интСграцията. Π’ΠΎΠ²Π° Π½ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° Π΄Π° услоТним Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°, Π·Π° Π΄Π° я Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ нСчувствитСлна към Ρ€Π΅Π΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС случват Π²ΡŠΠ½ΡˆΠ½ΠΈΡ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ³Ρ€Π°Ρ‡ΡŠΡ‚ Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Π½ Π΄Π° участва Π² ΠΈΠ³Ρ€Π°Ρ‚Π°, слСд ΠΊΠ°Ρ‚ΠΎ обяви ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ си ΠΎΡ‚ ΠΈΠ³Ρ€Π°Ρ‚Π°: Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ³Ρ€Π°Ρ‡ΠΈ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Ρ‚ Π΄Π° ΠΌΡƒ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ информацията Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ достигнС ΠΈ бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° ΠΎΡ‚ всички участници. Π’Π°Π·ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π΅ слСдва ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° ΠΈΠ³Ρ€Π°Ρ‚Π° ΠΈ Π΅ компромисно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΈΠ·Π±Ρ€Π°Π½Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½Π΅ΠΊΠ° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ‚ΡŠΠ½ΠΊΠΎΡΡ‚ΠΈ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, компромиси ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² Π΅Π΄Π½Π° опашка

Всички ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ прилоТСния работят с Π΅Π΄Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° шина, която сС прСдставя ΠΊΠ°Ρ‚ΠΎ външСн Π±Ρ€ΠΎΠΊΠ΅Ρ€, Π΅Π΄Π½Π° BPMQueue Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Π΅Π΄Π½Π° BPMTopic Ρ‚Π΅ΠΌΠ° Π·Π° сигнали (ΡΡŠΠ±ΠΈΡ‚ΠΈΡ). ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΏΡ€Π΅Π· Π΅Π΄Π½Π° опашка само ΠΏΠΎ сСбС си Π΅ компромис. На Π½ΠΈΠ²ΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Ρ‚Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π½ΠΎΠ²ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ искатС, Π±Π΅Π· Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² структурата Π½Π° систСмата. Π’ΠΎΠ²Π° Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростяванС, Π½ΠΎ носи ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ рисковС, ΠΊΠΎΠΈΡ‚ΠΎ Π² контСкста Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈΡ‚Π΅ Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½ΠΈ сС струваха Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΈ.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPM стил

Π’ΡƒΠΊ ΠΎΠ±Π°Ρ‡Π΅ ΠΈΠΌΠ° Π΅Π΄Π½Π° Ρ‚ΡŠΠ½ΠΊΠΎΡΡ‚: всяко ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° "своитС" ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π½Π° Π²Ρ…ΠΎΠ΄Π°, ΠΏΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° своя Π΄ΠΎΠΌΠ΅ΠΉΠ½. ОсвСн Ρ‚ΠΎΠ²Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС посочСн Π² сигналитС, Π°ΠΊΠΎ трябва Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ "ΠΎΠ±Ρ…Π²Π°Ρ‚Π°" Π½Π° сигнала Π΄ΠΎ Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° трябва Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ чСстотната Π»Π΅Π½Ρ‚Π° Π½Π° ΡˆΠΈΠ½Π°Ρ‚Π°, Π½ΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π²Π΅Ρ‡Π΅ трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ: Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π° адрСсиранС Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½ΠΎ Π·Π° сигнали.

Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° надСТдността Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° шина

НадСТдността сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ няколко Π½Π΅Ρ‰Π°:

  • Π˜Π·Π±Ρ€Π°Π½ΠΈΡΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ΠΈ СдинствСна Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°: Ρ‚ΠΎΠΉ трябва Π΄Π° бъдС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ устойчив Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Врябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ само ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΈ във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с Π΄ΠΎΠ±Ρ€Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΈ голяма общност;
  • Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° сС осигури висока наличност Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠΉ трябва Π΄Π° бъдС физичСски ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ прилоТСния (високата наличност Π½Π° прилоТСния с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½Π° ΠΈ скъпа Π·Π° осигуряванС);
  • Π±Ρ€ΠΎΠΊΠ΅Ρ€ΡŠΡ‚ Π΅ длъТСн Π΄Π° прСдостави "ΠΏΠΎΠ½Π΅ вСднъТ" Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° доставка. Π’ΠΎΠ²Π° Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ изискванС Π·Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° шина. Няма Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π½Π° Π½ΠΈΠ²ΠΎ β€žΡ‚ΠΎΡ‡Π½ΠΎ Π²Π΅Π΄Π½ΡŠΠΆβ€œ: бизнСс процСситС ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ са чувствитСлни към ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ пристиганС Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΈ ΠΏΡ€ΠΈ спСциални Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, Π΅ ΠΏΠΎ-лСсно Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ към бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ постоянно доста "скъпи" Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ;
  • ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ сигнали трябва Π΄Π° бъдС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΎΠ±Ρ‰Π° транзакция с промяна Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° бизнСс процСситС ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΠΈ Π±ΠΈΠ» Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ шаблона Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Π° изходяща кутия, Π½ΠΎ Ρ‰Π΅ изисква Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Ρ€Π΅Π»Π΅. Π’ JEE прилоТСнията Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС опростСно Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ JTA ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€, Π½ΠΎ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° с избрания Π±Ρ€ΠΎΠΊΠ΅Ρ€ трябва Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ XA;
  • ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° входящи ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΡΡŠΡ‰ΠΎ трябва Π΄Π° работят с транзакцията Π·Π° промяна Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° бизнСс процСса: Π°ΠΊΠΎ Ρ‚Π°ΠΊΠ°Π²Π° транзакция бъдС Π²ΡŠΡ€Π½Π°Ρ‚Π° Π½Π°Π·Π°Π΄, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ трябва Π΄Π° бъдС ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ;
  • ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ доставСни ΠΏΠΎΡ€Π°Π΄ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ D.L.Q. (Опашка Π·Π° ΠΌΡŠΡ€Ρ‚Π²ΠΈ писма). Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»Π½Π° микроуслуга Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, която ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² своСто Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, индСксира Π³ΠΈ ΠΏΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ (Π·Π° Π±ΡŠΡ€Π·ΠΎ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅) ΠΈ ΠΈΠ·Π»Π°Π³Π° API Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π΄ΠΎ адрСса Π½Π° мСстоназначСниС ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. БистСмнитС администратори ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° работят с Ρ‚Π°Π·ΠΈ услуга Ρ‡Ρ€Π΅Π· своя ΡƒΠ΅Π± интСрфСйс;
  • Π² настройкитС Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° трябва Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ броя Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° доставка ΠΈ Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΡΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ доставкитС, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ вСроятността ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ‚ Π² DLQ (ΠΏΠΎΡ‡Ρ‚ΠΈ нСвъзмоТно Π΅ Π΄Π° сС изчислят ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° дСйстватС Π΅ΠΌΠΏΠΈΡ€ΠΈΡ‡Π½ΠΎ ΠΈ Π΄Π° Π³ΠΈ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° опСрация);
  • Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° DLQ трябва Π΄Π° сС наблюдава Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ ΠΈ систСмата Π·Π° наблюдСниС трябва Π΄Π° увСдомява систСмнитС администратори, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Π΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ€Π΅Π°Π³ΠΈΡ€Π°Ρ‚ възмоТно Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ нСдоставСни ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π’ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΠΌΠ°Π»ΠΈ β€žΠ·ΠΎΠ½Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°β€œ ΠΎΡ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄Π° ΠΈΠ»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° Π² бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°;
  • ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° шина трябва Π΄Π° Π΅ нСчувствитСлна към Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΡ‚ΠΎ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅ Π½Π° прилоТСния: Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π·Π° Ρ‚Π΅ΠΌΠΈ трябва Π΄Π° са Ρ‚Ρ€Π°ΠΉΠ½ΠΈ, Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ някой Π΄Ρ€ΡƒΠ³ Π΄Π° Π½Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ΠžΡΠΈΠ³ΡƒΡ€ΡΠ²Π°Π½Π΅ Π½Π° бСзопасност Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π° Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°

Π•Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° бизнСс процСс ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ няколко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ навСднъТ, чиято ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° прилоТСния всичко трябва Π΄Π° Π΅ просто ΠΈ бСзопасно Π·Π° нишки.

БизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° процСса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° всяко външно ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ засяга Ρ‚ΠΎΠ·ΠΈ бизнСс процСс ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΎ. Π’Π΅Π·ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚:

  • стартиранС Π½Π° СкзСмпляр Π½Π° бизнСс процСс;
  • потрСбитСлско дСйствиС, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с дСйност Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° бизнСс процСс;
  • ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ сигнал, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Π°Π±ΠΎΠ½ΠΈΡ€Π°Π½ СкзСмпляр Π½Π° бизнСс процСс;
  • ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π·Π°Π΄Π°Π΄Π΅Π½ ΠΎΡ‚ СкзСмпляра Π½Π° бизнСс процСса;
  • ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΎ дСйствиС Ρ‡Ρ€Π΅Π· API (Π½Π°ΠΏΡ€. ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ Π½Π° процСса).

Всяко Ρ‚Π°ΠΊΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° СкзСмпляр Π½Π° бизнСс процСс: някои дСйности ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π°Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚, стойноститС Π½Π° постояннитС свойства ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС промСнят. ЗатварянСто Π½Π° всяка дСйност ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ слСднитС дСйности. Π’Π΅ ΠΎΡ‚ своя страна ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° спрат Π΄Π° Ρ‡Π°ΠΊΠ°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΈΠ»ΠΈ, Π°ΠΊΠΎ Π½Π΅ сС нуТдаят ΠΎΡ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠ°Ρ‚ ΡΡŠΡ‰Π°Ρ‚Π° транзакция. ΠŸΡ€Π΅Π΄ΠΈ затварянС Π½Π° транзакцията, Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° бизнСс процСса сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Ρ‡Π°ΠΊΠ° слСдващото външно ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅.

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π·Π° бизнСс процСси, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, са ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° синхронизиранС Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π˜Π—Π‘ΠžΠ  ЗА ΠΠšΠ’Π£ΠΠ›Π˜Π—Π˜Π ΠΠΠ•. Ако Π΅Π΄Π½Π° транзакция Π΅ успяла Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° бизнСс процСса ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π°, Π·Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° никоя Π΄Ρ€ΡƒΠ³Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° транзакция няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π·Π° Π΄Ρ€ΡƒΠ³Π° промяна ΠΈ слСд ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° транзакция, Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π²Π΅Ρ‡Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

Използвайки пСсимистични ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ ΠΎΡ‚ страна Π½Π° Π‘Π£Π‘Π”, Π½ΠΈΠ΅ изпълнявамС всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ изисквания ACID, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° Ρ‡Ρ€Π΅Π· ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° броя Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈΡ‚Π΅ СкзСмпляри.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, пСсимистичнитС Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ Π½ΠΈ Π·Π°ΠΏΠ»Π°ΡˆΠ²Π°Ρ‚ с блокирания, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π˜Π—Π‘Π•Π Π•Π’Π• ЗА ΠΠšΠ’Π£ΠΠ›Π˜Π—Π˜Π ΠΠΠ• всС ΠΎΡ‰Π΅ трябва Π΄Π° бъдС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π΄ΠΎ някакво Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ Π² случай Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° някои Π³Ρ€ΡƒΠ±ΠΈ случаи Π² бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°.

Π”Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ синхронизиранСто Π½Π° стартиранСто Π½Π° бизнСс процСса. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ няма СкзСмпляр Π½Π° бизнСс процСс, няма ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ описаният ΠΌΠ΅Ρ‚ΠΎΠ΄ няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ. Ако искатС Π΄Π° осигуритС уникалността Π½Π° СкзСмпляр Π½Π° бизнСс процСс Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΎΠ±Ρ…Π²Π°Ρ‚, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ някакъв Π²ΠΈΠ΄ ΠΎΠ±Π΅ΠΊΡ‚ Π·Π° синхронизация, ΡΠ²ΡŠΡ€Π·Π°Π½ с класа Π½Π° процСса ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΎΠ±Ρ…Π²Π°Ρ‚. Π—Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈ позволява Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ рСсурс, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ URI Ρ‡Ρ€Π΅Π· външна услуга.

Π’ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ бизнСс ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ InitialPlayer ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° дСкларация

uniqueConstraint = UniqueConstraints.singleton

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ ΠΈ освобоТдаванС Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡. Няма Ρ‚Π°ΠΊΠΈΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ бизнСс процСси: uniqueConstraint Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с бизнСс процСси с постоянно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅

Понякога Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° постоянно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π΅ само ΠΏΠΎΠΌΠ°Π³Π°, Π½ΠΎ ΠΈ наистина Π²ΡŠΠ·ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ.
ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΈ / ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° бизнСс процСса. Нито Π΅Π΄Π½Π° Ρ‚Π°ΠΊΠ°Π²Π° промяна Π½Π΅ Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° със старото ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° бизнСс процСситС. Ако ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ "ΠΆΠΈΠ²ΠΈ" копия Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ чСсто срСщамС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ jBPM.

Π’ зависимост ΠΎΡ‚ Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° промяната ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° дСйстватС ΠΏΠΎ Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π°:

  1. ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ² Ρ‚ΠΈΠΏ бизнСс процСс, Π·Π° Π΄Π° Π½Π΅ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² стария, ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ вмСсто стария, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стартиратС Π½ΠΎΠ²ΠΈ СкзСмпляри. Π‘Ρ‚Π°Ρ€ΠΈΡ‚Π΅ инстанции Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Ρ‚ Π΄Π° работят "ΠΏΠΎ стария Π½Π°Ρ‡ΠΈΠ½";
  2. ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ постоянното ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° бизнСс процСситС ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°.

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π½Π°Ρ‡ΠΈΠ½ Π΅ ΠΏΠΎ-прост, Π½ΠΎ ΠΈΠΌΠ° своитС ограничСния ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅ Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π² ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° бизнСс процСси, ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°;
  • чСсто сС изисква ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ към Π½ΠΎΠ²Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° (ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π·Π° интСграция);
  • Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π΅ Π·Π½Π°Π΅ Π² ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅ възмоТно Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅Ρ‚Π΅ остарСлитС ΠΌΠΎΠ΄Π΅Π»ΠΈ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈ Π΄Π²Π°Ρ‚Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π½ΠΎ смС Π²Π·Π΅Π»ΠΈ Ρ€Π΅Π΄ΠΈΡ†Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π·Π° Π΄Π° опростим ΠΆΠΈΠ²ΠΎΡ‚Π° си:

  • Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ постоянното ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° бизнСс процСса сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² лСсна Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ лСсна Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°: Π² Π½ΠΈΠ· във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ JSON. Π’ΠΎΠ²Π° Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‚Π°ΠΊΠ° ΠΈ извън Π½Π΅Π³ΠΎ. Π’ СкстрСмни случаи ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π³ΠΎ настроитС с Π΄Ρ€ΡŠΠΆΠΊΠΈ (особСно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ);
  • ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠΌΠ΅Π½Π° Π½Π° бизнСс процСси, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅ Π΅ възмоТно Π΄Π° сС Π·Π°ΠΌΠ΅Π½ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ участващитС процСси с Π½ΠΎΠ², с Π½ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žInitialPlayerV2β€œ). ΠžΠ±Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ става Ρ‡Ρ€Π΅Π· ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΈ сигналитС;
  • ΠΌΠΎΠ΄Π΅Π»ΡŠΡ‚ Π½Π° процСса ΠΈΠΌΠ° Π½ΠΎΠΌΠ΅Ρ€ Π½Π° вСрсия, ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°ΠΌΠ΅, Π°ΠΊΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π», ΠΈ Ρ‚ΠΎΠ·ΠΈ Π½ΠΎΠΌΠ΅Ρ€ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π·Π°Π΅Π΄Π½ΠΎ със ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° СкзСмпляра Π½Π° процСса;
  • постоянното ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° процСса сС Ρ‡Π΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΎ ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π° Π² ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚Π΅Π½ ΠΌΠΎΠ΄Π΅Π», с ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π·Π° миграция ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π°ΠΊΠΎ Π½ΠΎΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° вСрсията Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»;
  • ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π·Π° миграция сС поставя Π΄ΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΈ сС Π½Π°Ρ€ΠΈΡ‡Π° "ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²Π°" Π·Π° всСки СкзСмпляр Π½Π° бизнСс процСса Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ;
  • Π°ΠΊΠΎ трябва Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Ρ‚Π΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° всички СкзСмпляри Π½Π° процСси Π±ΡŠΡ€Π·ΠΎ ΠΈ синхронно, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΠΎ-класичСски Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ Ρ‚Π°ΠΌ трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с JSON.

Имам Π»ΠΈ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Ρ€Π°ΠΌΠΊΠ° Π·Π° бизнСс процСси?

Π Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°, описани Π² статията, Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ…Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° опростим ΠΆΠΈΠ²ΠΎΡ‚Π° си, Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния, ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ идСята Π·Π° раздСлянС Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π² микроуслуги ΠΏΠΎ-ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»Π½Π°. Π—Π° Ρ‚ΠΎΠ²Π° Π΅ ΡΠ²ΡŠΡ€ΡˆΠ΅Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°, създадСна Π΅ ΠΌΠ½ΠΎΠ³ΠΎ β€žΠ»Π΅ΠΊΠ°β€œ Ρ€Π°ΠΌΠΊΠ° Π·Π° бизнСс процСси, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ сСрвизни ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² контСкста Π½Π° ΡˆΠΈΡ€ΠΎΠΊ ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€ ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. ИмамС ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π΄Π° сподСлим Ρ‚Π΅Π·ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ, Π΄Π° прСдоставим Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΎΠ±Ρ‰ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π² ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΏΠΎΠ΄ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π΅Π½ Π»ΠΈΡ†Π΅Π½Π·. Π’ΠΎΠ²Π° Ρ‰Π΅ изисква извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΈ усилия. Π Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ стимул Π·Π° нас. Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° статия сС ΠΎΠ±Ρ€ΡŠΡ‰Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° самата Ρ€Π°ΠΌΠΊΠ°, Π½ΠΎ някои ΠΎΡ‚ тях са Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΎΡ‚ прСдставСнитС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ. Ако всС ΠΏΠ°ΠΊ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°ΠΌΠΊΠ°, Π½Π° нСя Ρ‰Π΅ бъдС посвСтСна ΠΎΡ‚Π΄Π΅Π»Π½Π° статия. ΠœΠ΅ΠΆΠ΄ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‰Π΅ Π²ΠΈ бъдСм Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΈ, Π°ΠΊΠΎ оставитС ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚Π·ΠΈΠ²ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ°:

Π’ Π°Π½ΠΊΠ΅Ρ‚Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° участват само рСгистрирани ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π’ΠΏΠΈΡˆΠΈ сС, Моля Ρ‚Π΅.

Имам Π»ΠΈ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Ρ€Π°ΠΌΠΊΠ° Π·Π° бизнСс процСси?

  • 18,8%Π”Π°, ΠΎΡ‚Π΄Π°Π²Π½Π° Ρ‚ΡŠΡ€ΡΡ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ.

  • 12,5%интСрСсно Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° рСализация, ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ2

  • 6,2%ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Ρ€Π°ΠΌΠΊΠΈ, Π½ΠΎ обмислямС Π΄Π° я Π·Π°ΠΌΠ΅Π½ΠΈΠΌ1

  • 18,8%ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Ρ€Π°ΠΌΠΊΠΈ, всичко ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°3

  • 18,8%справянС Π±Π΅Π· Ρ€Π°ΠΌΠΊΠ°3

  • 25,0%Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ своя собствСна4

16 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ гласуваха. 7 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ сС Π²ΡŠΠ·Π΄ΡŠΡ€ΠΆΠ°Ρ…Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€