ddd ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Domain Driven Design
Π‘ΠΈΠ½ΠΈΠΉ ΠΊΠΈΡ β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΠΏΠΎ ΠΏΠ»Π°Π½Ρ. ΠΠΈΡ Π²Π½Π΅ΡΠ½Π΅ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΡΡΠ±Ρ, Π½ΠΎ ΠΎΠ½ ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡΠ°ΡΡΠ΅Π΅: ΠΊΠΎΡΠΌΠΈΡ Π΄Π΅ΡΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠΎΠ»ΠΎΠΊΠΎΠΌ, Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΡΠ΅ΡΡΡΡ, Π° Π² ΠΏΠ»Π°Π²Π½ΠΈΠΊΠ°Ρ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈΡΡ ΠΊΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΏΠ»Π΅ΡΡΡ ΠΈ ΠΊΠΈΡΡΠ΅ΠΉ Ρ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ Ρ ΡΡΡ ΠΎΠΏΡΡΠ½ΡΡ . ΠΠ½ ΠΆΠΈΠ²Π΅Ρ Π² ΠΎΠΊΠ΅Π°Π½Π°Ρ , Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄ΡΡΠ°ΡΡ ΠΏΠΎΠ΄ Π²ΠΎΠ΄ΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π³Π»ΠΎΡΠ½ΡΡΡ Π²ΠΎΠ·Π΄ΡΡ Π°, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΡΠΏΠΈΡ. ΠΠΈΡ ΡΠ°ΠΌΠΎΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ΅ Π² ΠΌΠΈΡΠ΅, Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ Π΄Π΅Π²ΡΡΠΈΡΡΠ°ΠΆΠ½ΡΠΉ Π΄ΠΎΠΌ, Π° ΠΌΠ°ΡΡΠΎΠΉ ΠΊΠ°ΠΊ 75 Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ Volkswagen Touareg, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Ρ ΠΈΡΠ½ΠΈΠΊ, Π° ΠΏΠΈΡΠ°Π΅ΡΡΡ ΠΏΠ»Π°Π½ΠΊΡΠΎΠ½ΠΎΠΌ.
ΠΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π°Π΄ ΠΊΠΈΡΠΎΠΌ, ΡΠΎ Π½Π΅ ΡΡΠ°Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ Ρ Π½ΡΠ»Ρ, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ· ΡΡΠ°ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². ΠΠ½ ΡΠ»ΠΎΠ²Π½ΠΎ ΡΠ»Π΅ΠΏΠ»Π΅Π½ ΠΈΠ· Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ, Π° Π²ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΊ Π²ΡΠ±ΠΎΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° ΠΈ ΠΊ ΡΡΠΎΡΠ½ΠΎΠΌΡ Β«Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» ΡΠΆΠ΅ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π΅. Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ Π²Π½Π΅ΡΠ½Π΅, Π½ΠΎ Ρ ΠΊΡΡΠΊΠ°ΠΌΠΈ Π΄ΡΠ΅ΠΌΡΡΠ΅Π³ΠΎ Π»Π΅Π³Π°ΡΠΈ ΠΈ ΠΊΠΎΡΡΡΠ»Π΅ΠΉ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π±ΠΈΠ·Π½Π΅ΡΡ Π·Π°ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, Π° Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠΈΡ Π½Π° ΠΌΠΎΡΡΠΊΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄ΡΡΠ°ΡΡ ΠΏΠΎΠ΄ Π²ΠΎΠ΄ΠΎΠΉ, Π΅ΡΡΡ DDD. ΠΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΊΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Π΅, Π° Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ Π½Π° ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ DDD ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π² Π½Π΅ΠΌ Π΅ΡΡΡ, ΠΌΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ Π² ΡΡΠ°ΡΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΡΡΠ΅ΠΌΠ° ΠΠ°Π»ΡΡΠ΅Π²Π°. ΠΠΎΠ΄Ρ ΠΎΠ΄ DDD Π² Python, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ, ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π²ΠΎΠΊΡΡΠ³ ΡΠ΅ΡΠ°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° β Π²ΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ.
ΠΡΡΠ΅ΠΌ ΠΠ°Π»ΡΡΠ΅Π² (proofit404) β Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΏΠΈΡΠ΅Ρ Π½Π° Python 5 Π»Π΅Ρ, Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π» Ρ Django Channels 1.0. ΠΠΎΠ·ΠΆΠ΅ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°Ρ : ΠΈΠ·ΡΡΠΈΠ», ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠ°ΠΌ Π½Π° Python, ΠΈ Π½Π°ΡΠ°Π» ΠΏΡΠΎΠ΅ΠΊΡ dry-python. Π‘ΠΎΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Drylabs.
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½Π°Ρ Π±ΠΎΡΡΠ±Π° ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΡΠ°ΡΡΡΡ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π₯ΠΎΡΠΎΡΠΈΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ ΠΏΡΠΈΠ²Π½Π΅ΡΠ΅Π½Π½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ? ΠΡΠΎΡΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΠ½ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ ΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΡΠΆΠ΅Π»ΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ β Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΈΠ²Π½Π΅ΡΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ²Π½Π΅ΡΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ β ΠΌΠΎΠΉ Π»ΡΠ±ΠΈΠΌΡΠΉ Β«callback hellΒ».
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ (EDA) ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π΅ ΡΠ°ΠΌΡΠΉ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. Π§ΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΡΡΠΆΠ΅Π»ΠΎ β ΡΡΠΎ ΠΎΠΏΡΡΡ ΠΏΡΠΈΠ²Π½Π΅ΡΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΠΎΠΆΠ°ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π΅ΡΠ΅ ΠΈ ΡΠΏΠΎΡΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· Π½ΠΈΡ Π»ΡΡΡΠ΅:
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ β ΠΡΠΈΠΊ ΠΠ²Π°Π½Ρ. Π 2004 Π³ΠΎΠ΄Ρ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π» ΠΊΠ½ΠΈΠ³Ρ Β«Domain Driven DesignΒ» (Β«ΠΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β»). ΠΠ½Π° Β«Π²ΡΡΡΡΠ΅Π»ΠΈΠ»Π°Β» ΠΈ Π΄Π°Π»Π° ΠΈΠΌΠΏΡΠ»ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄ΡΠΌΠ°ΡΡ ΠΎ Π±ΠΈΠ·Π½Π΅ΡΠ΅, Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΎΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠ»Π°Π½.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ DDD?
Π‘Π½Π°ΡΠ°Π»Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π° ΠΏΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΠ²Π°Π½Ρ Π²ΠΊΠ»Π°Π΄ΡΠ²Π°Π» Π² ΠΏΠΎΠ½ΡΡΠΈΠ΅ DDD, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, Π° ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ. Π ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π° ΡΠΆΠ΅ ΠΏΠΎΡΠΎΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ².
Π Π°Π±ΠΎΡΠ°ΠΉΡΠ΅ Π½Π°Π΄ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ Π² ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΠ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π»ΡΠ΄ΡΠΌΠΈ ΠΈΠ· Π±ΠΈΠ·Π½Π΅ΡΠ°: ΠΈΡΠΊΠ°ΡΡ ΠΎΠ±ΡΠΈΠΉ ΡΠ·ΡΠΊ, ΡΡΡΠΎΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ°, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΏΡΠΎΠ΄ΡΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΈΡΠΈΡΠ΅ ΠΠ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π½ΠΎ Π²ΡΡΠ°ΠΆΠ°Π΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ DDD ΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ»Π»Π°Π±ΠΎΡΠ°ΡΠΈΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΈΡΠ°ΡΡ ΠΠ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΡΠΈΠ»Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Ρ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. ΠΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΡΡΠΎΠ±Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠ³ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΠΎΠ²ΠΎΡΠΈΡΠ΅ Ρ Π±ΠΈΠ·Π½Π΅ΡΠΎΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅. DDD β ΡΡΠΎ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Ρ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ ΠΈΠ· Π±ΠΈΠ·Π½Π΅ΡΠ° Π³ΠΎΠ²ΠΎΡΠΈΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ ΠΊ ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ. Π£ Π½Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΡΠ·ΡΠΊ ΠΈΠ»ΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ ΠΈΡΡΠΈΠ½ΠΎΠΉ. ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π³ΡΠ°Π½ΠΈΡΡ Π²ΠΎΠΊΡΡΠ³ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ, ΠΏΠΎΡΠΎΠΌ β DDD. Π‘ΠΊΡΠ»ΡΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΡΡΠ°ΡΡΡ ΠΈΠ· ΠΊΠ°ΠΌΠ½Ρ Π½Π΅ ΡΠΈΡΠ°Π΅Ρ ΠΌΠ°Π½ΡΠ°Π» ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠΎΠ»ΠΎΡΠΎΠΊ ΠΈ Π΄ΠΎΠ»ΠΎΡΠΎ β ΠΎΠ½ ΡΠΆΠ΅ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΈΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π§ΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π½Π΅ΡΡΠΈ DDD Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΎΡΠ²ΠΎΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΡΡ: Π²ΡΡΡΠΈΡΠ΅ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Django, ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΡΠΎΡΠΈΠ°Π» ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΡΡΠ΅ ΡΠΏΠΎΡΠΈΡΡ, ΡΡΠΎ Π±ΡΠ°ΡΡ β PostgreSQL ΠΈΠ»ΠΈ MongoDB.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΡΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠΌ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π·Π½Π°Π΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ β ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅. ΠΠ½ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π½ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π±ΠΈΠ·Π½Π΅ΡΠ° ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΌΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ°Π±ΡΠΈΠΊΠΈ ΠΈΠ»ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠ»Π°Π±ΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ ΠΊ DDD.
ΠΠ΅ΡΠ²Π°Ρ Β«ΡΠΈΠ½ΡΡΒ» ΠΊΠ½ΠΈΠ³Π° Π²ΡΡΠ»Π° ΠΏΠΎΡΡΠΈ 20 Π»Π΅Ρ Π½Π°Π·Π°Π΄. ΠΡΠ΄ΠΈ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΏΠΈΡΠ°ΡΡ Π² ΡΡΠΎΠΌ ΡΡΠΈΠ»Π΅, Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎ Π³ΡΠ°Π±Π»ΡΠΌ, ΠΈ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ Ρ ΠΎΡΠΎΡΠ°Ρ, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½Π°Ρ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΡΠΎΡΠ°Ρ ΠΊΠ½ΠΈΠ³Π° β Β«ΠΊΡΠ°ΡΠ½Π°ΡΒ», ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΠΌΡΡΠ»ΠΈΡΡ ΠΈ ΠΏΠΈΡΠ°ΡΡ Π² DDD.
Β«ΠΡΠ°ΡΠ½Π°ΡΒ» ΠΈ Β«ΡΠΈΠ½ΡΡΒ» ΠΊΠ½ΠΈΠ³ΠΈ β ΡΡΠΎ ΡΡΠΎΠ»ΠΏΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠΎΠΈΡ Π²ΡΠ΅ DDD.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΡΠ°ΡΠ½Π°Ρ ΠΈ ΡΠΈΠ½ΡΡ ΠΊΠ½ΠΈΠ³ΠΈ β ΡΡΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ DDD, Π½ΠΎ ΠΎΠ½ΠΈ ΡΡΠΆΠ΅Π»ΡΠ΅. ΠΠ½ΠΈΠ³ΠΈ Π½Π΅ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΠ°ΡΡ: Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅ ΠΈΠ·-Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ², Π° Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΠΈΠ·-Π·Π° ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°. ΠΠΎΡΡΠΎΠΌΡ, Π½Π°ΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ DDD Ρ Β«Π·Π΅Π»ΡΠ½ΠΎΠΉΒ» ΠΊΠ½ΠΈΠ³ΠΈ. ΠΡΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠ΅ΡΠ²ΡΡ Π΄Π²ΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΏΠΎΠΏΡΠΎΡΠ΅ ΠΈ ΠΎΠ±ΡΠΈΠΌΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ. ΠΠΎ Π»ΡΡΡΠ΅ ΡΠ°ΠΊ, ΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ ΠΊΡΠ°ΡΠ½Π°Ρ ΠΈ ΡΠΈΠ½ΡΡ ΠΊΠ½ΠΈΠ³Π° ΠΎΡΠΎΠ±ΡΡΡ Ρ Π²Π°Ρ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΠ·ΡΡΠ°ΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ DDD. ΠΡΡΡΠ΅ ΡΠΈΡΠ°ΡΡ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅.
Π ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΡΠΎΡΠΊΠ°ΠΊΠΈΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Ρ, ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ DDD ΠΏΡΠΈΠ²Π½ΠΎΡΠΈΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π²ΠΎΠΊΡΡΠ³ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°. ΠΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ β Β«Model-Driven DesignΒ», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π²ΠΈΡΡΡ Π½Π°ΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ°.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β Β«Smart UIΒ». ΠΡΠΎ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΌΠΈΡΠΎΠΌ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ Π½Π°ΠΌΠΈ (ΠΎΡΡΡΠ»ΠΊΠ° ΠΊ Π ΠΎΠ±Π΅ΡΡΡ ΠΠ°ΡΡΠΈΠ½Ρ ΠΈ Π΅Π³ΠΎ ΡΠΈΡΡΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΡΠΎ ΡΠ»ΠΎΡΠΌΠΈ). ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, Π²ΡΠ΅ ΠΈΠ΄Π΅Ρ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ? ΠΡΠΎ ΡΠ°Π½ΡΠΎΠΌΠ½Π°Ρ Π±ΠΎΠ»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠ°. ΠΡΠ΅ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΡΡΠΎ UML, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ.
ΠΠΎΠ΄Π΅Π»Ρ β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΡΡΠ»ΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠ°ΠΆΠ°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΠΎΠ΄Π΅Π»Ρ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΡΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΊΠ΅ΠΉΡΠΎΠ². ΠΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΊΠ»Π°ΡΡΡ ΠΆΠ΅, ΡΡΠΎ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Dry-python
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Ρ Π½Π°ΡΠ°Π» ΠΏΡΠΎΠ΅ΠΊΡ dry-python, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠΎΡ Π² Π½Π°Π±ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Model Driven Design. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°ΠΊΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΊΡΡΠ³ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΈ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π΄ΡΡΠ³ΠΈΠΌ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠ΅, Π΅ΡΠ»ΠΈ Π²ΠΎΠΉΡΠΈ Π²ΠΎ Π²ΠΊΡΡ.
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Ρ ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ DDD Π² ΠΏΡΠΎΠ΅ΠΊΡ β ΠΏΠΎ ΡΠ»ΠΎΡΠΌ. ΠΠ΅ΡΠ²ΡΠΉ ΡΠ»ΠΎΠΉ β ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² (ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²) Π² Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ° ΡΡΠΎΡ ΡΠ»ΠΎΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Stories.
Stories
ΠΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄Π΅Π»ΡΡΡΡ Π½Π° ΡΡΠΈ ΡΠ°ΡΡΠΈ:
ΠΡΠ°ΠΏ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π³Π°. Π ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ΅ subscription ΠΏΠΈΡΠ΅ΠΌ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΠ°Π³Π°ΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Π²Ρ ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²Π° Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠ°ΡΠΊΠ΅Ρ ΠΈ ΡΠΎΠΎΠ±ΡΠΈΡΡ:
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Story. ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ Story Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅? ΠΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄: ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π½Π° Π²Ρ
ΠΎΠ΄ Π΄Π°Π½Π½ΡΠ΅, ΠΎΠ½ ΠΈΡ
Π²Π°Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΠ°Π³ΠΈ. ΠΡΠΏΠΎΠ»Π½ΡΡΡΠ°ΡΡΡ Story ΠΏΠΎΠΌΠ½ΠΈΡ ΠΈΡΡΠΎΡΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»ΠΎ Π² Π½Π΅ΠΉ Π² Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΈ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΠΌ, ΠΊΡΠΎ Π²Π»ΠΈΡΠ» Π½Π° ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠ°Π½Π΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠΈΡΠ΅ΠΌ Π½Π° Django ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ°Π½Π΅Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ ΠΈ ΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
Py.test. ΠΡΠ»ΠΈ ΠΏΠΈΡΠ΅ΠΌ Π² py.test, ΡΠΎ Π΄Π»Ρ ΡΠΏΠ°Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈ ΡΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ β Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ²ΡΡΡΠ½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅, ΠΏΡΠΎΡΠΈΡΠ°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠΉΠΌΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ.
Sentry. ΠΡΠ΅ Π»ΡΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΡ 500. Π ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΡ ΡΠΌΠΈΡΡΠ΅ΠΌΡΡ Ρ Π½Π΅ΠΉ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π²Π΅ΡΡΠΈ ΡΠ°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. Π Sentry ΠΆΠ΅, ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΠΎΡΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅Π»Π°Π» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ. Π£Π΄ΠΎΠ±Π½ΠΎ ΠΈ ΠΏΡΠΈΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π² 3 ΡΠ°ΡΠ° Π½ΠΎΡΠΈ ΡΠ°ΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ Π·Π° ΡΠ΅Π±Ρ.
ELK. Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π½Π°Π΄ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΈΡΠ΅Ρ ΡΡΠΎ Π²ΡΠ΅ Π² Elasticsearch Π² ΡΡΠ΅ΠΊ Kibana ΠΈ ΡΡΡΠΎΠΈΡ Π³ΡΠ°ΠΌΠΎΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π½Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΌ Π΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, relation ID ΠΎΡΡΠ΅ΡΠ°. ΠΠΌΠ΅ΡΡΠΎ Π°ΡΡ Π°ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ°ΠΌ ΠΊΠΎΠ³Π΄Π°-ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ, ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π² Kibana. ΠΠ½ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π²ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ Story, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ°Π»ΡΡΠ΅ ΠΌΡ ΠΈΠ·ΡΡΠ°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ Π½Π°ΡΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π². ΠΡ Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Π»ΠΎΠ³ΠΈΡΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ.
ΠΠΎ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ΅Π³ΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π»Π΅Π³ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΡΠ°Π½ΡΡ Π² ΡΠ΅Π±Π΅ Π³ΡΠ°ΠΌΠΎΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΏΡΠΈΠ½ΡΡΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΠ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ Model-Driven Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ β entities, agregates ΠΈ value objects.
Entities, agregates ΠΈ value objects
ΠΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½ΠΎ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΄Π΅Π»Π°Π» Π·Π°ΠΊΠ°Π· ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΠΈ ΠΌΡ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΡΠ΅Ρ. Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΠΊΠΎΡΠ΅Π½Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ, Π° ΡΡΠΎ β ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ?
ΠΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΠΎ, ΡΡΠΎ ΠΊΠΎΡΠ΅Π½Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ. ΠΡΠΎ ΡΠΎ, Ρ ΡΠ΅ΠΌ Ρ Ρ ΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ: Π²Π°ΠΆΠ½ΠΎΠ΅, ΡΠ΅Π½Π½ΠΎΠ΅, ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΠ΅.
Π‘ΡΠ°Π·Ρ ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠ΅ΡΠ΅Π· Django, ΡΠΎΡΠ΅Π΄Π½ΠΈΠΉ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡ Π·Π°ΠΏΡΠΎΡΡ, Π΅ΡΡΡ JSON ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Django-ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ ΠΈΡ ΡΡΠΊΠ°ΠΌΠΈ, ΠΏΡΠΎΡΡΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΡΠ°ΡΠΈΠ²ΠΎ? ΠΠ΅Ρ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. Π dry-python Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Mappers, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠ΅ Π°Π³ΡΠ΅Π³Π°ΡΡ Ρ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, Π³Π΄Π΅ ΠΌΡ ΠΈΡ Ρ ΡΠ°Π½ΠΈΠΌ.
Mappers
Π§Π΅ΡΠ΅Π· Mappers ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎ-ΡΠΎ ΡΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΏΠΈΡΡΡ. Π§ΠΈΡΠ°ΡΡΠΈΠ΅ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½Π° Π²Ρ ΠΎΠ΄ Π°Π³ΡΠ΅Π³Π°Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π° Π½Π΅Π³ΠΎ ΡΠ΅ΡΠ΅ΡΠ΅Π½Ρ. ΠΠΈΡΡΡΠΈΠ΅ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ β Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π°Π³ΡΠ΅Π³Π°ΡΡ. ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΠΎΡ ΠΊ Π±Π°Π·Π΅ ΡΠ΅ΡΠ΅Π· Django.
Π ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ²ΠΈΡ Pusher. ΠΡ Π½Π΅ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°Π»ΠΈΡΡ, ΠΎΠ±Π΅ΡΠ½ΡΠ»ΠΈ Π΅Π³ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΡΠΎΠ±Ρ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π»ΠΈ Π²ΠΎ Π²ΡΠ΅Ρ Stories ΠΈ Π±ΡΠ»ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½Ρ.
ΠΠΎ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ. ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Pusher ΠΊ Π²Π΅Π± ΡΠΎΠΊΠ΅ΡΠ°ΠΌ, Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΡΠΆΠ½Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΡΡΠΎΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 2 ΠΌΠΈΠ½ΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΅Ρ Π°ΡΡ Π½Π° ΡΠ΅ΡΠ²ΠΈΡ Ably Realtime. Π Π½Π΅ΠΌ ΠΆΠ΅ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ β Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π°Π΄Π°ΠΏΡΠ΅Ρ ΠΈ ΠΏΡΠΈΠ²ΡΠΆΠ΅ΠΌ Π΅Π³ΠΎ Π²Π΅Π·Π΄Π΅, Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅Ρ.
ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Pusher (Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ) ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° 100 Stories, ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΡΠΎ-ΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ.
Tests & mocks
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΡΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ? Π§ΡΠΎ-ΡΠΎ ΠΌΠΎΠΊΠ°Π΅ΠΌ, ΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΈ Π²ΡΠ΅ β ΠΌΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π²ΡΠ΅ Ρ
ΠΎΡΠΎΡΠΎ. ΠΠΎ ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎ ΡΠΎΡΠΌΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠΆΠ΅ ΠΌΠ΅Π½ΡΡΡΡΡ.
ΠΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π΅Π΄Π΅Π»Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ ΡΡΡΡΡΠΈ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΎΡΠ½ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΊΠ΅ΠΉΡΠΎΠ², Π΅ΡΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ½Π°ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΌ-ΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΌ Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΏΠΈΡΠ΅ΠΌ Π² ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π° ΡΠΆΠ΅ Π²Π½ΡΡΡΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠ°, Pusher ΠΈΠ»ΠΈ Ably ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ Π² Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ Π²ΡΠ΅ Π² Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ.
Dependencies
Π ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. Π Π°Π½ΡΡΠ΅ ΠΌΡ Π±ΡΠ°Π»ΠΈ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ Django-ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΏΠΈΡΠ°Π»ΠΈ Π΅Π΅: Π·Π°ΠΏΡΠΎΡ, ΠΎΡΠ²Π΅Ρ, ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΄Π΅ΡΡ Π½Π°Π΄ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Mappers, ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² Stories ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΡΠΎΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° HTTP-Π·Π°ΠΏΡΠΎΡΠ°, ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΡΠ²Π΅Ρ ΠΎΡΠ΄Π°ΡΡ. ΠΡΠ΅ ΡΡΠΎ Π²ΡΠ»ΠΈΠ²Π°Π΅ΡΡΡ Π² 30-50 ΡΡΡΠΎΠΊ boilerplate ΠΊΠΎΠ΄Π° Π²ΡΠ·ΠΎΠ²Π° Stories Π²Π½ΡΡΡΠΈ Django-view.
ΠΠ°ΡΡΠ° ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°
ΠΡΠΈΠΌΠ΅Π½ΡΡ Π²ΡΠ΅, ΠΎ ΡΠ΅ΠΌ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΡ Π΅ΠΌΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π»ΠΈ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Ρ Django ΡΠΈΠ³Π½Π°Π»ΠΎΠ² (Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ Β«callback hellΒ») Π½Π° Django ΠΏΠΎ DDD.
ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ Π±Π΅Π· DDD. Π‘Π½Π°ΡΠ°Π»Π° Ρ Π½Π°Ρ Π½Π΅ Π±ΡΠ»ΠΎ DDD β ΠΌΡ ΠΏΠΈΡΠ°Π»ΠΈ MVP. ΠΠΎΠ³Π΄Π° Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π΅Π½ΡΠ³ΠΈ, ΠΏΡΠΈΠ³Π»Π°ΡΠΈΠ»ΠΈ ΠΈΠ½Π²Π΅ΡΡΠΎΡΠΎΠ², ΠΈ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° DDD.
Stories Π±Π΅Π· ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ². Π Π°Π·Π±ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-ΠΊΠ΅ΠΉΡΡ Π±Π΅Π· ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ½ΡΡΠ°ΠΊΡΡ ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΡ. ΠΠΎΡΠΎΠΌ ΠΎΠ΄ΠΈΠ½ Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅.
Mappers. ΠΠ°ΠΏΠΈΡΠ°Π»ΠΈ Mappers, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠ·Π±Π°Π²ΠΈΠ»ΠΈΡΡ ΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠΊΠ»Π΅ΠΉΠΊΠΈ.
ΠΡΠ»ΠΈ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠΎΡ MVP ΠΈ Π² Π½Π΅ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠΎΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π΅ ΡΠΊΠ°ΡΠΈΠ»ΡΡ Π² legacy β ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΡΡΠΎΡΠΎΠ½Ρ DDD.
ΠΠ°ΠΊΠΈΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ legacy Π² Python-ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Ρ Π½ΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΡΠΆΠ΅Π»ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΡΡΠ²ΠΎ, ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π½Π° Moscow Python Conf++ 27 ΠΌΠ°ΡΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ Π² ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Ρ ΠΎ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ Π°ΡΠΏΠ΅ΠΊΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ Ρ Python ΠΈ ΠΎΠ± Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΡΡΠ½ΡΡ Π·Π°Π΄Π°Ρ. Π Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠΉ Ρ Π½Π°Ρ unconference, ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΈΠ· ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ², ΠΈ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠΈ ΠΏΠ°ΡΡΠ½Π΅ΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΡΠ°Π· Drylabs.
Π Π΅ΡΠ»ΠΈ DDD ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ Π²Π°Ρ Π²Π½Π΅ Python, ΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° TechLead Conf β ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ ΠΏΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ IT-ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ DDD ΡΠ°Π΄Π°Ρ. ΠΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡΡΡ 8 ΠΈΡΠ½Ρ, Call for Papers ΠΎΡΠΊΡΡΡ Π΄ΠΎ 6 Π°ΠΏΡΠ΅Π»Ρ.
ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ Domain-Driven Design
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ Π½Π° Django Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΠΏΡΠΎΡΡΠΎ: Π΅ΡΡΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΡΡΡΠΈΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΠΈΠ΄ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ Π½Π°ΡΠΈΠ½Π°Π»Π°ΡΡ Dodo IS (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΠΎΠ΄ΠΎ ΠΠΈΡΡΠ°, Π³Π΄Π΅ ΡΠ°Π±ΠΎΡΠ°Π» Π°Π²ΡΠΎΡ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½Π΅ΠΉ ΡΡΠ°ΡΡΠΈ). ΠΠΎ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Django ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ²ΠΎΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π±Π΅Π΄ ΠΈ Π²ΡΡΡΠ΅ΡΠΈΡΡ ΠΏΠ°ΡΠΊΡ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ². ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈ ΡΠ°ΠΊΠΎΠ΅ Π½Π° ΡΡΠ°ΡΡΡ legacy-ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
ΠΠ²Π³Π΅Π½ΠΈΠΉ ΠΠ΅ΡΠΊΠΎΠ² ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ DDD-ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ², ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠ°Π΅Ρ Domain-Driven Design (ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅) Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΌΠΈΡΠ΅. ΠΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Russian Python Week 2020 ΠΎΠ½ Π²ΡΡΡΡΠΏΠΈΠ» Ρ ΡΠ°ΡΡΠΊΠ°Π·ΠΎΠΌ ΠΎΠ± ΡΡΠΎΠΌ. ΠΡΡΠ°ΡΠΈ, 19 Π°Π²Π³ΡΡΡΠ° ΠΏΡΠΎΠΉΠ΄Π΅Ρ Π²ΡΡΡΠ΅ΡΠ° DDDevotion-ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°, ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ, Π±ΡΠ΄Π΅ΠΌ ΠΎ ΡΠ΅ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ.
Π ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½Π΅ΠΉ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ Π΅Π³ΠΎ ΡΠ°ΡΡΠΊΠ°Π· ΠΏΡΠΎ ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ Domain-Driven Design ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅ΡΠ° ΠΈ ΡΠ°ΠΌ Π±ΠΈΠ·Π½Π΅Ρ.
ΠΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ ΠΎΡΡ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ ΡΠ°ΡΡΠ΅Ρ, ΠΈ Π²ΡΠ»Π΅Π΄ Π·Π° Π½ΠΈΠΌ ΠΏΠΎΠ²ΡΡΠ°Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΡ Π±ΠΎΠ»ΡΡΠ΅. Π ΡΠ°ΠΌΠΎΠ΅ ΠΏΠ»ΠΎΡ ΠΎΠ΅, ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ β Π²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠ»Π΅ΡΡΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ»ΠΎΡΠΌ.
Π ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΡΠΎ Π΄ΠΎΠ»Π³ΠΈΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ. ΠΡΠΎ ΠΏΠΎΠ»Π±Π΅Π΄Ρ β ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ. ΠΠΎΡΠ°Π·Π΄ΠΎ Ρ ΡΠΆΠ΅, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ β Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·ΡΡΡ ΠΊΡΡΠΎΡΠ΅ΠΊ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΎΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΠΎ Π΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ. Π’ΡΠΎΠ³Π°Ρ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΡΡΠ΅ΡΡ, Π²Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΡΠΎΠ½ΡΡΡ Π±ΡΠΊ-ΠΎΡΠΈΡ. ΠΡΠ΅Π½Ρ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΡΡΠ³Π°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° β ΡΡΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π΅ ΡΠ°ΡΡΡ. ΠΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π² application-ΡΠ΅ΡΠ²ΠΈΡΠ΅. ΠΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊ Π²Π°ΠΌ ΡΠΆΠ΅ ΠΏΡΠΈΡΠ»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π° Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π΅ Π² ΠΏΠΎΠ»Π½ΡΡ ΡΠΈΠ»Ρ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π³Π΄Π΅ ΠΆΠ΄Π°ΡΡ Null Reference Exception. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» Π»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΈΠ»ΠΈ Π³Π΄Π΅-ΡΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ ΠΈ Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π²ΡΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΈΠ»ΠΈ Π΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ Π΄Π΅Π»Π°ΡΡ.
ΠΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ, Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΠ½ΠΈΡ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π Π½Π°Π΄ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½Ρ.
Π ΡΠ°ΠΌΠΎΠ΅ ΠΏΠ»ΠΎΡ ΠΎΠ΅, ΡΡΠΎ Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅Ρ Π³ΡΠ°Π½ΠΈΡ ΠΈ Π½Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°Π·ΠΌΠ°Π·Π°Π½Π½ΡΠΉ. ΠΠ΅Π»Π°Ρ Π½ΠΎΠ²ΡΡ ΡΠΈΡΡ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠΎΠ»Π΅ΡΠ°Π½ΡΠ½ΠΎΡΡΡ ΠΊ ΠΏΠ»ΠΎΡ ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΊΠ°Π· Ρ ΠΊΠ°ΡΡΡ ΡΠ΅ΡΡΠΎΡΠ°Π½Π°, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΊΠ°Π·Π°ΡΡ ΠΏΠΈΡΡΡ, Π° ΠΌΡ β ΡΡΠ΅ΡΡΡ Π²Π°Ρ Π·Π°ΠΊΠ°Π·. ΠΠ»Ρ ΠΊΠ°ΡΡΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΏΠΎΠ»Ρ. ΠΠΎΡΠΎΠΌ ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π΄ΠΎΡΡΠ°Π²ΠΊΠ΅, ΠΈ Π² ΡΡΡΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ°Π·Π° ΡΠ½ΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ»Ρ. ΠΠ΄ΡΠ΅Ρ ΠΈ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° Π½Π΅ Π½ΡΠΆΠ½Ρ ΡΠ΅ΡΡΠΎΡΠ°Π½Ρ, Π½ΠΎ Ρ Π½Π°Ρ β ΠΎΠ±ΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π·Π°ΠΊΠ°Π·Π°.
ΠΠ°Π»ΡΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅Ρ, ΠΏΠΎΡΠΎΠΌ ΠΌΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΈ ΠΏΠΈΠ»ΠΈΠΌ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΡΠΈ, Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π° ΠΈ Ρ.Π΄. ΠΡΡ ΡΡΠΎ ΠΎΠΏΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»Ρ. ΠΠ°ΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠΎΠ½ΡΡΡΡΠΎΠ·Π½ΠΎΠΉ, ΠΊΠ°ΠΊ Π»Π΅ΡΡΠ½ΠΈΡΠ° ΠΡΠ΅ΡΠ°: Π² Π½Π΅ΠΉ 30 ΠΏΠΎΠ»Π΅ΠΉ, Π½ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΠΎΠΌΡ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ ΠΈ ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π·Π°ΠΊΠ°Π· Π½Π° ΡΡΠΈ ΡΠ°ΡΡΠΈ, ΡΠ°ΠΊ ΠΌΡ ΠΈΠ·Π±Π°Π²ΠΈΠΌΡΡ ΠΎΡ ΠΌΡΡΠΎΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Π½Π°Ρ Π±ΡΠ΄ΡΡ ΡΠΊΠ²ΠΎΠ·Π½ΡΠ΅ ΠΏΠΎΠ»Ρ β ID, ΡΡΠΌΠΌΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ»Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π½Π°Π½ΠΈΡ, Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΡΠΎΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅.
Bounded Context. Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½
ΠΠ°ΠΊ ΠΈΡΠΊΠ°ΡΡ Π³ΡΠ°Π½ΠΈΡΡ
Bounded Context β ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π½Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ. ΠΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΡΡΡΡ ΡΠΌΠΏΠΈΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ΅Ρ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠ°ΠΏΠ°Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠ»Π°Π²Π°ΡΡ, ΠΈ ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Bounded Context Π² Π²Π°ΡΠ΅ΠΉ CRM ΡΠ²ΡΠ·Π°Π½ Ρ ΠΏΡΠΎΠ΄Π°ΠΆΠ°ΠΌΠΈ, ΡΠΎ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠΈ ΠΈ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³.
ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π³ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π°ΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ Π΄Π°Π½Π½ΡΠ΅ β Π½Π΅ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅, Π° ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ. ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ², ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π·Π΄Π΅ΡΡ Π΄Π²Π° Bounded Context, Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΡΡΠ°ΠΏΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΠΏΠΎΠ²Π΅Π·Π»ΠΈ Π·Π°ΠΊΠ°Π· ΠΊΡΠ΄Π°-ΡΠΎ, ΠΎΠ½ ΡΡΠ°Π·Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ. Π ΡΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΊΡΡΡΠ΅ΡΠ° Π·Π°ΠΊΠ°Π· Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠΌ, ΡΠ΅ΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° Π²Π΅Π±-ΡΠ°ΠΉΡΠ΅.
ΠΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ Π½Π°ΡΠ΅ΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ°Π·Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΡΠΊΡΠΏΠ΅ΡΡΠΎΠ², ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π³ΡΠ°Π½ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΌ. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΎΡΠ³ΡΡΡΡΠΊΡΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ β ΠΎΠ½Π° ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, Π³Π΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠ΅ Π»ΠΈΡΠ°. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠ°ΠΏΠ°Ρ , ΠΈ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ΅ΡΡΠΈΠ²Π°ΡΡ Π³ΡΠ°Π½ΠΈΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Ρ Π±ΡΡ Π³Π°Π»ΡΠ΅ΡΠΎΠΌ, ΠΎΠ½ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΎ Π·Π°ΠΊΠ°Π· ΠΏΠΈΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ²ΠΎΠΈ Π²Π΅ΡΠΈ, ΠΈ Π½Π΅ Π½Π°Π΄ΠΎ Π΅Π³ΠΎ Π³ΡΡΠ·ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅ΡΠΎΠΌ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ. Π, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ Π·Π°ΠΊΠ°Π· Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ, Π½Π°ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΡΠ°ΠΌΠΌ ΡΠ΅ΡΡΠ° ΠΈ ΡΡΡΠ° ΠΌΡ ΡΠΏΠΈΡΠ°Π»ΠΈ Π½Π° Π·Π°ΠΊΠ°Π·.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΠΌ, ΡΡΠΎ Π·Π°ΠΊΠ°Π· Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ. Π£ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π°ΠΊΠ°Π·ΠΎΠ²:
Π ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³Π»ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ Ρ Π±ΠΈΠ·Π½Π΅ΡΠΎΠΌ ΠΈ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, Π² Domain-Driven Design ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠ·ΡΠΊ.
ΠΠ΄ΠΈΠ½ΡΠΉ ΡΠ·ΡΠΊ (Ubiquitous Language)
ΠΡΠΈΠΊ ΠΠ²Π°Π½Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Domain-Driven Design Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ Π½Π΅Π³ΠΎ. ΠΡΡ ΡΡΡΡ DDD β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ Π² Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΠΎΡΡΠ°Π·ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΠ΅Π»ΠΈ.
ΠΠ΄ΠΈΠ½ΡΠΉ ΡΠ·ΡΠΊ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠ΅ΡΠΌΠΈΠ½Ρ, ΠΏΠΎΠ½ΡΡΠΈΡ, ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΠ°Π·Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ β ΡΡΠΎ Event storming. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π² Domain-Driven Design β ΡΡΠΎ Π°Π³ΡΠ΅Π³Π°Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅.
ΠΡΠ»ΠΈ ΠΊΡΠ°ΡΠΊΠΎ, ΡΠΎ Π΄Π»Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Event storming Π½ΡΠΆΠ½Ρ: Π±ΠΎΠ»ΡΡΠ°Ρ ΡΡΠ΅Π½Π° (10 ΠΌ), ΡΡΠΈΠΊΠ΅ΡΡ, ΠΌΠ°ΡΠΊΠ΅ΡΡ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΡ. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ Π°Π³ΡΠ΅Π³Π°ΡΠ°ΠΌΠΈ, Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Ρ Bounded Context ΠΈ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ. ΠΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π»ΡΠ΄Π΅ΠΉ ΠΌΡ ΠΏΠΎΠ·Π²Π°Π»ΠΈ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π΅Π΅ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π Domain-Driven Design ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌΠΈ. ΠΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ Π±ΡΡΡ ΡΡΡΡ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ΄Ρ, ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅.
Π’Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Domain-Driven Design
Domain-Driven Design β Π½Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π°Π½Π΅ΠΌΠΈΡΠ½ΡΡ ΠΈ Π΄ΡΡΡΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠΠ½Π΅ΠΌΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅Ρ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ, ΡΠΎ Π΅ΡΡΡ ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ DTO, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅. Π ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΡΡΡΠ²ΡΠΌ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ Application Services ΠΌΠΎΠ³ Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡΡ.
ΠΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°ΠΊ Π΄Π΅Π»Π°Π»ΠΈ. Π£ Π½Π°Ρ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ Π½Π°Π·Π°Π΄, ΠΈ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π‘Π΅ΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ, Π·Π°ΠΏΠΎΠ»Π½ΡΡ ΠΏΠΎΠΏΡΡΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΏΠΎΠ»Ρ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ β Π΄ΡΡΡΠ²ΡΠ΅.
Π ΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ? ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠ°Π²ΠΈΠ»Π°. Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ Application Services ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π΅ΠΌΡ ΠΌΡΡΠΎΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠΈ ΠΌΡΡΠΎΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π»ΡΠ΄ΡΠΌΠΈ, ΠΈ ΡΡΠ΄Π° Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠΌΠ΅Π»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΡ Π±Ρ ΡΠ°ΡΡΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ.
ΠΡΠΎ Π²ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡ (coupling) ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ»Π°Π±ΡΡ ΠΊΠΎΡ Π΅Π·ΠΈΡ (cohesion), ΡΠΎ Π΅ΡΡΡ ΠΌΡ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΡΡΠΎ ΠΈ ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½ΠΎ Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° Ρ Π±ΠΎΠ»ΡΡΠΈΡ legacy-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ, ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈΡ ΡΠ²ΡΠ·Π΅ΠΉ.
Π ΠΏΡΠΎΡΠΈΠ²ΠΎΠ²Π΅Ρ ΡΡΠΎΠΌΡ Domain-Driven Design ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Rich Domain Model β Π±ΠΎΠ³Π°ΡΡΡ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ. Π Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΡΡΠΎΠΌΡ Π°Π³ΡΠ΅Π³Π°ΡΡ.
ΠΠ³ΡΠ΅Π³Π°ΡΡ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π°Π³ΡΠ΅Π³Π°Ρ? Π§ΡΠΎΠ±Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΡΠ½ΠΎΡΡΡ. Π£ ΠΠ²Π°Π½ΡΠ° Π΅ΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ: Value Object ΠΈ ΡΡΡΠ½ΠΎΡΡΡ.
Π‘ΡΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΠΠ²Π°Π½ΠΎΠ²ΡΡ ΠΠ»Π΅ΠΊΡΠ΅Ρ, ΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π½ΡΠΌΠΈ Π»ΡΠ΄ΡΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ Π½ΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ ΠΏΠΎΠ»Ρ. Value Object β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅Π½ΡΠ³ΠΈ β ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²Π°Π»ΡΡΡ ΠΈ amount. Π Π΅ΡΠ»ΠΈ ΡΡΠΈ Π΄Π²Π° ΠΏΠΎΠ»Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, Π²Ρ ΡΡΠΈΡΠ°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π²Π΅ΡΠΈ.
Π‘ΡΡΠ½ΠΎΡΡΠΈ ΠΈ Value Objects Π² Domain-Driven Design ΠΏΡΠΈΠ½ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π² Π°Π³ΡΠ΅Π³Π°Ρ. ΠΡΠΈ ΡΡΠΎΠΌ Π°Π³ΡΠ΅Π³Π°Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈΠ·Π²Π½Π΅ ΠΊΠ°ΠΊ API Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈ Ρ Π½ΠΈΠΌ ΡΠ²ΡΠ·Π°Π½ Π½Π°Ρ Π·Π°ΠΊΠ°Π·, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π°Π΄ΡΠ΅ΡΠ°. ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΌ Π·Π°ΠΊΠ°Π·.
ΠΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π°Π³ΡΠ΅Π³Π°ΡΠ°
ΠΡΡΡ ΡΠΎΠ±Π»Π°Π·Π½ Π·Π°ΠΏΠΈΡ Π°ΡΡ Π²ΡΠ΅ Π² ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ Π°Π³ΡΠ΅Π³Π°Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΌ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½ΠΎ Π² DDD Π΅ΡΡΡ Π½Π΅Π³Π»Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ. ΠΠΎΠ½ ΠΠ΅ΡΠ½ΠΎΠ½ Π½Π°ΡΡΠ°ΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ Π°Π³ΡΠ΅Π³Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎ. ΠΠ»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π½ΡΡΡΠΈ ΡΠΌΠ°ΡΡΡΠΎΠ½Π°, ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΎΡΡΡΠΏ ΠΎΠ΄Π½ΠΎΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ, ΠΌΡ ΡΡΠΈΡΠ°Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠ°Π·Π»ΠΎΠΆΠΈΠ»ΠΈ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ Π½ΠΈΠΌ. ΠΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ. ΠΠΎ Π² Π²Π΅Π± ΠΌΡ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡΡΡΠΏ Π½Π΅ ΠΎΠ΄Π½ΠΎ-, Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ²ΠΎΠΉ Π€Π΅ΠΉΡΠ±ΡΠΊ, ΠΈ ΡΠ°ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΡ β ΡΡΠΎ Π°Π³ΡΠ΅Π³Π°Ρ, Π° Π»Π°ΠΉΠΊ β ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠ°. ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π»Π°ΠΉΠΊΠ΅ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ. ΠΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π½Π°Π³ΡΡΠ·ΠΊΠ΅ Π½Π° ΠΆΠ΅Π»Π΅Π·ΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΠΎΠ»ΡΡΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡΡΡΠΈ consistency Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π±ΡΠ»ΠΎ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ 5 ΡΡΡΡΡ Π»Π°ΠΉΠΊΠΎΠ², ΠΌΡ Π² ΠΈΡΠΎΠ³Π΅ Ρ ΠΎΡΠΈΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° Π²ΡΡΡΠΊΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ concurrency-Π΄ΠΎΡΡΡΠΏ, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ Π·Π°ΡΠ΅ΡΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠΎΡΡΠΎΠΌΡ Π°Π³ΡΠ΅Π³Π°Ρ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΡΠ°Π½ΠΈΡΠ΅Π»Π΅ΠΌ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ, ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ½ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°Ρ ΡΠΏΠΈΡΠΎΠΊ Π΄Π΅Π», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π² ΠΎΠ΄ΠΈΠ½ Π·Π°Ρ ΠΎΠ΄, Π° Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ, ΠΏΡΠΈ Π»Π°Π³Π΅ ΡΠ΅ΡΠΈ ΠΌΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π·Π°ΠΏΠΈΡΠ΅ΠΌ, ΠΈ ΠΏΡΠΈ Π²ΡΡΠΈΡΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠΈΡΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Ρ, ΠΏΡΠΎΠ±Π΅Π³Π°Ρ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌ. ΠΡ ΠΈΡ ΠΏΡΠΈΠΊΠ°ΠΏΡΠ²Π°Π΅ΠΌ, ΡΡΠΎΠ±Ρ Π±ΡΡΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° Π²ΡΡΡΠΊΠΈ, Π½ΠΎ ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° Ρ 10 ΡΡΡΡΡΠ°ΠΌΠΈ Π·Π°Π΄Π°Ρ ΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 9999. Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ Π² ΡΠΎΡΡΠ΅ΡΡΡ , ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π»Π°ΠΉΠΊΠ°/notification, Π° Π·Π°Ρ ΠΎΠ΄ΠΈΡΡ Π² notification β ΠΈ ΠΈΡ ΡΠ°ΠΌ Π½Π΅Ρ. ΠΡΠ° Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡ .
ΠΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΡΠΎΠ³ΠΎ. Π Π·Π΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Outbox Pattern Π² ΡΠ°ΠΌΠΊΠ°Ρ Eventual Consistency (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ), ΡΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π½Π΅ Π²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π·Ρ, Π° ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ ΡΠ°ΡΡΡ, ΠΎΡΠΏΡΠ°Π²Π»ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΡ ΡΠΈΠ½Ρ Π΄ΡΡΠ³ΠΈΠΌ Bounded Context.
ΠΠΎΠ΄Ρ ΠΎΠ΄ Outbox Pattern
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ schedulerΒ΄Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, TODO-Π»ΠΈΡΡΡ Π² Π½Π΅ΠΌ Π»Π΅ΠΆΠ°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΈ Π΅ΡΡΡ Π΄Π²Π° ΡΠ΅ΡΠ²ΠΈΡΠ°: ΠΎΠ΄ΠΈΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ, Π΄ΡΡΠ³ΠΎΠΉ β Π²ΡΠ΄Π°ΡΠ΅ΠΉ TODO-Π»ΠΈΡΡΠΎΠ². ΠΠ²Π° ΡΠ΅ΡΠ²ΠΈΡΠ° β ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π°ΠΆΠ΅ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠ°, Π½ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Π½ΠΈ ΠΏΠΎ storage, Π½ΠΈ ΠΏΠΎ ΠΊΠΎΠ΄Ρ, ΠΈΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΌΡ ΡΠ²ΡΠΆΠ΅ΠΌ ΠΈΡ ΠΏΠΎ Π±Π°Π·Π΅, ΡΠΎ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΊΡΠΎ-ΡΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ΅Ρ, ΠΈ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΈΡ Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ.
ΠΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Outbox Pattern. ΠΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ scheduler, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΠ, Π΅ΡΡΡ Π΅ΡΠ΅ RabbitMQ. Π’ΠΈΠΏΠΈΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΌΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΠ²ΠΎΡ Π±Π°Π·Ρ, ΠΈ ΠΊΠΈΠ½ΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² RabbitMQ. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΡΠ΅ΡΡ ΠΌΠΎΡΠ³Π½Π΅Ρ, ΡΠ²ΠΎΡ ΠΠ ΡΡΠ°Π½Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΈΡΠ΅ΠΌ Π² ΠΠ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½ΠΎ ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅, Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΠΈΠ²Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΎΡΠ΅Π»ΠΈ ΠΊΠΈΠ½ΡΡΡ Π² RabbitMQ. ΠΠΎΡΠΎΠΌ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΊ RabbitMQ. ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½, ΡΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ publisher, ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠΎΡΡΠΈΡ, ΡΡΠΎ Π½Π΅ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΅ΡΡΡ Π² ΠΠ, ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ.
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π·Π΄Π΅ΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΌΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌ, ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΠΌΡ Π² RabbitMQ ΠΈΠ»ΠΈ Π½Π΅ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ. ΠΠ½ΠΎΠ³Π΄Π° Π΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ reordering, ΡΠΎ Π΅ΡΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½Π΅ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΈΡΠ°ΡΡ.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ. RabbitMQ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠ΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΈ reordering. ΠΠΎ Π½Π°Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ RabbitMQ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΡΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ Π² ΡΠ°Π·Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π΄Π»Ρ Π½Π°Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΌ ΠΈ ΠΊΠΎΠΌΠΌΡΡΠ°ΡΠΈΠ²Π½ΡΠΌ. ΠΡ Π½Π΅ ΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ, Π° ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΅ΡΡΡ. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΡΡΡΠΌΠΈ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, correlation key.
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡ Π»ΡΠ΄ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΡΠ°ΡΡ, ΡΠ΅ΠΌ ΠΏΠΈΡΡΡ. Π ΠΠ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΠ΄ ΡΡΠΎ-ΡΠΎ ΠΎΠ΄Π½ΠΎ. ΠΠΈΠ±ΠΎ ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΠΌ Π»ΡΠ΄ΡΠΌ Π±ΡΡΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ, Π½ΠΎ ΡΠΎΠ³Π΄Π° Π½Π°ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΡΠΎ Π²ΡΠ΅ ΠΈ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π»ΡΠ΄ΡΠΌ. ΠΠΈΠ±ΠΎ ΠΌΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΠ΄ Π±ΡΡΡΡΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π΄ΠΎΠ»Π³ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ. ΠΡΠΎ ΡΠ°ΠΊΠΎΠΉ trade-off Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ storage. ΠΠ°ΠΊΠΈΠ΅-ΡΠΎ storage ΡΠ΅ΡΠ°ΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½Π΅Π΅, ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ Π½Π° Π΄Π²Π΅: Write ΠΈ Read. Π’Π°ΠΊ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ CQRS.
ΠΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡ ΠΎΠ±Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈ Write, ΠΈ Read. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΡΠΈΡΠ°Π΅ΠΌ ΠΌΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ CQRS ΠΌΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΈ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅. Π Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΈ Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Read β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ΄ΠΎΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ². Π’Π°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Read-ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Event Sourcing
ΠΠ΄Π΅ΡΡ ΠΈΠ΄Π΅Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠΎΡΡΠ°Ρ. ΠΡ Ρ ΡΠ°Π½ΠΈΠΌ Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π½Π΅ state Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΡ state ΠΌΠ΅Π½ΡΡΡ. ΠΡΠ΅Π½Ρ ΡΠ²Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π² Π±ΡΡ Π³Π°Π»ΡΠ΅ΡΡΠΊΠΎΠΌ ΡΡΠ΅ΡΠ΅. Π’Π°ΠΌ ΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ append-only ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΡ Π±Π΅Π½Π΅ΡΠΈΡΠΎΠ². ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ state, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ ΠΌΡ ΠΊ ΡΡΠΎΠΌΡ state ΠΏΡΠΈΡΠ»ΠΈ. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π°ΠΊΠΊΠ°ΡΠ½Ρ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΠΈΠ΄Π΅ΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ, ΡΡΠΎ Π½Π° Π½Π΅ΠΌ Π»Π΅ΠΆΠΈΡ 100 ΡΡΠ±Π»Π΅ΠΉ, Π° ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠΈ Π΄Π΅Π½ΡΠ³ΠΈ Π½Π°ΠΊΠΎΠΏΠΈΠ»ΠΈΡΡ.
Event Sourcing ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°Π³. ΠΠ°Π»ΡΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ Π²Π΅ΡΡ: ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ, ΠΌΡ Π²ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ.
ΠΠ°ΠΊ ΠΌΡ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ? ΠΠ° Π·Π°ΠΏΡΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ° ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π±Π°Π»Π°Π½Ρ ΠΈ ΠΎΡΠ΄Π°Π΅ΠΌ Π½Π°ΡΡΠΆΡ. Π ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Event Sourcing ΠΌΡ Π²ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π΅ Π±Π°Π»Π°Π½Ρ, Π° ΡΠ²Π΅Π½ΡΡ. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΠΏΠΎΠ΄Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ²Π΅Π½ΡΡ Π½Π° Π²Ρ ΠΎΠ΄ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈ ΡΠ²Π΅Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π΅Ρ Π½Π° Π³ΠΎΠ»ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π±Π°Π»Π°Π½Ρ, Π½ΠΎ ΡΡΠΎΡ Π±Π°Π»Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡ Π½ΠΈΠ³Π΄Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ ΡΠ°Π½ΠΈΠΌ Π±Π°Π»Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ, Π° ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π΅Π³ΠΎ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌ. ΠΠ°, ΠΏΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΡ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡ Π²ΠΈΠ΄ΠΈΠΌ Π²ΡΡ ΠΈΡΡΠΎΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΠ»Π°ΡΡΠ½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡ ΡΡΠ°Π±Π»ΡΡΡΠΈΡΡ, ΡΡ Π·Π½Π°Π΅ΡΡ, ΠΊΠ°ΠΊ ΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ. Π£ ΡΠ΅Π±Ρ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π»ΠΎΠ³ΠΈ, Π° ΠΏΡΡΠΌΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡ Event Sourcing Π»Π΅Π³ΠΊΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ. Π― Ρ ΡΠ°ΠΊΠΈΠΌ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΠΎ-ΡΠΎ ΠΎΡΠΈΠ±ΡΡ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π» Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΈΠ½ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠ»ΡΡΠ°. Π ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, Π³Π΄Π΅ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ state ΠΈ Π±Π°Π»Π°Π½Ρ Π² Π±Π°Π·Ρ, ΠΌΡ Π±Ρ ΡΡΡΠ°Π»ΠΈ Π²ΡΡΠΈΡΠ°ΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠ°ΠΌ Π±Ρ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, Π²ΡΡΡΠΈΡΡΠ²Π°ΡΡ ΡΡΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΈ ΠΏΠΎΡΠΎΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ.
ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Event Sourcing, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄ ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π½ΠΎΠ²ΠΎ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ Ρ Π½Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅, Π½ΠΎ ΠΌΡ ΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΌΡ ΠΈΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ, ΡΠΎ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠΆΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΡΡΡΠΎΠΉ Π±Π΅Π½Π΅ΡΠΈΡ.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Ρ Event Sourcing Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ β ΡΡΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½Ρ. ΠΡΠ»ΠΈ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Ρ ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄ΠΎΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ²Π΅Π½ΡΡ, ΠΏΡΡΡΡ Π΄Π°ΠΆΠ΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ, ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΎ. Π Π΅ΡΠ»ΠΈ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ High Performance Trading, Π³Π΄Π΅ ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠΎ ΡΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ.
Π‘ΡΡΠΎΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΆΠ΅Π»ΠΎ, ΠΈ Π² DDD ΠΏΡΠΈΠΆΠΈΠ»Π°ΡΡ ΠΈΠ΄Π΅Ρ ΡΠΊΠ»Π΅ΠΈΡΡ Event Sourcing ΠΈ CQRS.
CQRS ΠΈ Event Sourcing
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΡΠΌ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ. Write-ΠΌΠΎΠ΄Π΅Π»Ρ β ΡΡΠΎ ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°Π΄Π°ΡΡ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°Π»Π°Π½Ρ ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΠ»ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄, ΡΠ½ΡΠ»ΠΈ Π΄Π΅Π½ΡΠ³ΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΡΠ°Ρ, ΠΎΠΏΠ»Π°ΡΠΈΠ» ΠΊΠΎΠΌΠΈΡΡΠΈΡ, Π΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ. ΠΡΠΎ Π²ΡΡ ΡΡΠΏΠ΅ΡΡΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ append-only Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠ°ΡΠ°ΡΡΡΡ ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , Π° ΡΡΠΎ-ΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ Π·Π°ΠΏΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Kafka. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ Ρ ΡΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ.
ΠΠ°Π»ΡΡΠ΅ Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π½Π°ΡΠΈ ΠΈΠ²Π΅Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΡΠΆΠ΅ Π² Read-ΠΌΠΎΠ΄Π΅Π»Ρ. Π’Π°ΠΊ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π±ΡΡΡΡΡΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ, ΡΡΠ΅Π½ΠΈΠ΅. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ β Π² Event Sourcing ΠΈ CQRS ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ read-your-own-writes, ΡΠΎ Π΅ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ°Π³ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΠΈΡΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ eventual consistency, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π·Π°ΠΏΠΈΡΡ Π² ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅Ρ
Π£ Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΡΡΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π±ΡΠΎΠΊΠ΅Ρ-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ β Π½Π° ΡΠΎΠΏΠΈΠΊ Kafka ΠΈΠ»ΠΈ Π½Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π² RabbitMQ. ΠΡΡΡΠ΄Π° Π΅ΠΌΡ ΠΏΡΠΈΠ»Π΅ΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ Π½ΠΎΠ²ΡΡ ΡΠΎΠ±ΡΡΠΈΡΡ . ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΏΡΠΈΠ»Π΅ΡΠ΅Π»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅, Π½ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅.
Π§ΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ? ΠΠ· Read ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π°Π³ΡΠ΅Π³Π°Ρ, ΡΠΎ Π΅ΡΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π°Ρ Π°Π³ΡΠ΅Π³Π°Ρ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ Π·Π°ΠΊΠ°Π·Π΅. ΠΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π²Π° ΠΏΠΎΠ»Ρ: Π²Π΅ΡΡΠΈΡ ΠΈ IsDirty β ΠΏΠΎΡΡΠΎΠ³Π°Π»ΠΈ Π»ΠΈ ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ°Π»ΡΡΠ΅ ΠΌΠ΅ΡΠΆΠΈΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ Ρ Π½Π°ΡΠΈΠΌ Π°Π³ΡΠ΅Π³Π°ΡΠΎΠΌ. ΠΠΎΠΏΡΡΠ½ΠΎ ΠΌΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄Π»Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° Outbox Pattern. ΠΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Bounded Context ΡΠΎΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡΡΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π°Π³ΡΠ΅Π³Π°Ρ ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅.
Π§ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ? Π£ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠΆΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΡΡΡ. ΠΠΎ ΡΡΠ° Π²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠ΅ΡΠ°ΡΡ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΅Π³ΠΎ Π²ΡΠΊΠΈΠ΄ΡΠ²Π°ΡΡ.
ΠΠ· Read ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π°Π³ΡΠ΅Π³Π°Ρ, ΠΌΠ΅ΡΠΆΠΈΠΌ Π΅Π³ΠΎ Ρ Π½ΠΎΠ²ΡΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ΠΌ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅, ΠΎΡΠΊΠΈΠ΄ΡΠ²Π°Π΅ΠΌ ΡΡΠ°ΡΠΎΠ΅, Π΄Π΅Π»Π°Ρ Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΡΠΎΠ±Π»ΡΠ΄Π°Ρ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΡ, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π°Π³ΡΠ΅Π³Π°Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ.
ΠΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎ concurrency. Π Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ Π΅Π½Π΄Π»Π΅Ρ ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΠΎΠ΄ΠΈΠ½. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΠΎ Π²ΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·ΡΠ΅Π΄Π΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Π·Π°ΡΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π°ΠΏΠ΄Π΅ΠΉΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π»ΠΈΠ±ΠΎ ΡΠ²Π½ΠΎ Π»ΠΎΡΠΈΠΌ Π½Π°ΡΡ Π·Π°ΠΏΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ pessimistic concurrency, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ optimistic concurrency, ΠΈ ΡΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π² Π±Π°Π·Ρ ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ Π°ΠΏΠ΄Π΅ΠΉΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 4. ΠΡΠ»ΠΈ Π²Π΄ΡΡΠ³ Π² Π±Π°Π·Π΅ Π»Π΅ΠΆΠΈΡ ΡΠΆΠ΅ 5 ΠΈΠ»ΠΈ 6 Π²Π΅ΡΡΠΈΡ, ΠΌΡ ΠΏΠ°Π΄Π°Π΅ΠΌ Ρ exception optimistic concurrency (ΡΡΠΎ ΠΌΡ ΡΠ°ΠΊ Π² ΠΊΠΎΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ), ΠΈ ΡΠΈΠΊΠ» ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ.
Π Π½ΠΎΠ²ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΌΡ Π²ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π°Π³ΡΠ΅Π³Π°Ρ Π·Π°Π½ΠΎΠ²ΠΎ, ΡΠΆΠ΅ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 6, ΠΈ ΠΎΠΏΡΡΡ ΠΌΠ΅ΡΠΆΠΈΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΡΠΈΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· ΠΎΠ½ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΆΠΈΠ»ΠΎΡΡ, ΡΠΎ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π· Π²ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΠ»ΠΎΡΡ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π΅Π³ΠΎ ΡΠΆΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΌΠ΅ΡΠΆΠΈΡΡ. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅. Π ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΎΠΏΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡ, Π° ΡΠ΅ΡΡΡΡ Π»ΠΈ Π²Π΅ΡΡΠΈΡ ΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ? ΠΡΠ»ΠΈ Π΄Π°, ΠΠ, ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ. ΠΡΠ»ΠΈ Π½Π΅Ρ (Ρ Π½Π°Ρ Π²ΡΠ΅ Π±ΡΡΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ), ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ.
Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΌΡ ΡΡΠΏΠ΅Π²Π°Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ. Π£ Π½Π°Ρ Π½Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½Ρ, ΠΊΠ°ΠΊ Π² Badoo, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈΠ»Π΅ΡΠ°ΡΡ. Π£ Π½Π°Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠ°Π»ΠΎ Π»ΡΠ΄Π΅ΠΉ ΠΌΠ΅Π½ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π° ΡΠΎΡΠ½Π΅Π΅, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠ΅Π½ΡΡΡ 1-2 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Ρ Π½Π°Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅Π΄ΠΊΠΈ, Π½ΠΎ ΠΌΡ ΠΎ Π½ΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΠΌ.
Π§Π΅ΠΌ Π½Π°ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Bounded Context? ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ½ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΊΠΎΠ³Π½ΠΈΡΠΈΠ²Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΎΡ ΡΠ°Π·Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ². ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Dodo IS ΡΠ΅ΠΉΡΠ°Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° 30-50 ΡΠ°Π·Π½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². Π― Π½Π΅ Π·Π½Π°Ρ ΠΈΡ Π²ΡΠ΅, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅. ΠΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Bounded Context, Ρ ΡΠ½ΠΈΠΆΠ°Ρ ΠΏΡΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ°, ΠΈ Π·Π° ΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Ρ.
ΠΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΠΈΡ. ΠΠΎΠ³Π΄Π° Ρ Π²Π°Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ Π°Π³ΡΠ΅Π³Π°Ρ Ρ ΡΡΠ½ΡΠΌΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ Ρ Π±ΠΈΠ·Π½Π΅ΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ°ΡΡΡ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠΊΡΡΠ°. Π’Π°ΠΊ Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅.
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Domain-Driven Design ΠΈ Π²ΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΡΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΡΡ ΠΎΠ΄ΡΡΠΈΠΌ Π² ΠΏΠΎΡΠΎΠ»ΠΎΠΊ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΠΈ, Π° ΡΠ°ΡΡΡΡΠΈΠΌ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ. ΠΡ ΡΠΎΡΡΠ° ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π²Ρ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΈΠ·Π±Π°Π²ΠΈΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π²Π°Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΠΌΠ΅ΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅. ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Ρ ΠΎΡΡ Π±Ρ Π½Π΅ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°.
ΠΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ Π΄Π»Ρ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠΉΠ΄Π΅Ρ 27 ΠΈ 28 ΡΠ΅Π½ΡΡΠ±ΡΡ Π² ΠΠΎΡΠΊΠ²Π΅. Π Π°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ, Π²ΡΠ±ΡΠ°ΡΡ ΡΠ°ΠΌΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΠΠΈΠ»Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΠΏΠΈΡΡ Π·Π΄Π΅ΡΡ. ΠΠΎ Π²ΡΡΡΠ΅ΡΠΈ Π² ΠΎΡΠ»Π°ΠΉΠ½-ΡΠ΅Π½ΡΡΠ±ΡΠ΅!