Найти Π² Π”Π·Π΅Π½Π΅
Π”Π΅Π±Π°ΠΆ πŸͺ² с Π½ΠΎΠ³ΠΈ 🦢

πŸ— DDD β€” ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅: Ρ‡Ρ‚ΠΎ это ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ

Если Ρ‚Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ страдал ΠΎΡ‚ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Domain-Driven Design (DDD). πŸ’‘ DDD β€” это ΠΏΡ€ΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ бизнСса, Π° Π½Π΅ ΠΏΡ€ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ API. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ β€” ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… процСссов ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π° Π½Π΅ Π²ΠΎΠΊΡ€ΡƒΠ³ тСхничСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Но Π²ΠΎΡ‚ Π² Ρ‡Ρ‘ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ❌ DDD слоТно Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ❌ Π­Ρ‚ΠΎ Π½Π΅ просто «новая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Β» β€” это Π΄Ρ€ΡƒΠ³ΠΎΠΉ взгляд Π½Π° ΠΊΠΎΠ΄ ❌ Π‘Π΅Π· дисциплины DDD прСвращаСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ πŸ“Œ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ DDD βœ… Bounded Context (ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ контСксты) β€” раздСляСм систСму Π½Π° нСзависимыС Π΄ΠΎΠΌΠ΅Π½Ρ‹. НапримСр, "Π—Π°ΠΊΠ°Π·Ρ‹" ΠΈ "Π‘ΠΈΠ»Π»ΠΈΠ½Π³" β€” это Ρ€Π°Π·Π½Ρ‹Π΅ процСссы, ΠΈΡ… Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ. βœ… Ubiquitous Language (Π•Π΄ΠΈΠ½Ρ‹ΠΉ язык) β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ бизнСс Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС. Если бизнСс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠšΠ»ΠΈΠ΅Π½Ρ‚", Π° Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ½ называСтся "UserEntity", Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΡƒΡ‚ явно Π²Ρ€Ρ‘Ρ‚. βœ… Entities ΠΈ Value Objects β€” сущности со своим ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ. βœ… Domain Events β€” Π²Π°ΠΆΠ½Ρ‹Π΅ события, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€

Если Ρ‚Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ страдал ΠΎΡ‚ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Domain-Driven Design (DDD).

πŸ’‘ DDD β€” это ΠΏΡ€ΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ бизнСса, Π° Π½Π΅ ΠΏΡ€ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ API. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ β€” ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… процСссов ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π° Π½Π΅ Π²ΠΎΠΊΡ€ΡƒΠ³ тСхничСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

Но Π²ΠΎΡ‚ Π² Ρ‡Ρ‘ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

❌ DDD слоТно Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ

❌ Π­Ρ‚ΠΎ Π½Π΅ просто «новая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Β» β€” это Π΄Ρ€ΡƒΠ³ΠΎΠΉ взгляд Π½Π° ΠΊΠΎΠ΄

❌ Π‘Π΅Π· дисциплины DDD прСвращаСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½

πŸ“Œ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ DDD

βœ… Bounded Context (ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ контСксты) β€” раздСляСм систСму Π½Π° нСзависимыС Π΄ΠΎΠΌΠ΅Π½Ρ‹. НапримСр, "Π—Π°ΠΊΠ°Π·Ρ‹" ΠΈ "Π‘ΠΈΠ»Π»ΠΈΠ½Π³" β€” это Ρ€Π°Π·Π½Ρ‹Π΅ процСссы, ΠΈΡ… Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ.

βœ… Ubiquitous Language (Π•Π΄ΠΈΠ½Ρ‹ΠΉ язык) β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ бизнСс Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС. Если бизнСс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠšΠ»ΠΈΠ΅Π½Ρ‚", Π° Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ½ называСтся "UserEntity", Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΡƒΡ‚ явно Π²Ρ€Ρ‘Ρ‚.

βœ… Entities ΠΈ Value Objects β€” сущности со своим ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ.

βœ… Domain Events β€” Π²Π°ΠΆΠ½Ρ‹Π΅ события, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ части систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "Π—Π°ΠΊΠ°Π· создан" β†’ "Π‘ΠΈΠ»Π»ΠΈΠ½Π³Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ счёт").

πŸ“‚ Как Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ DDD?

Одна ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ошибок β€” Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ DDD = микросСрвисы. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ. МоТно ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ DDD Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса, Ссли ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄.

πŸ”Ή Базовая структура DDD-сСрвиса

-2

πŸ›  Как ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ DDD Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ?

1️⃣ ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½Ρ‹ β€” Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ контСксты ΠΈ Π½Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ….

2️⃣ Π“ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π° языкС бизнСса β€” Ссли Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠšΠ»ΠΈΠ΅Π½Ρ‚", Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ это Ρ‚ΠΎΠΆΠ΅ "ΠšΠ»ΠΈΠ΅Π½Ρ‚", Π° Π½Π΅ "UserEntity".

3️⃣ Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ слои β€” домСнная Π»ΠΎΠ³ΠΈΠΊΠ°, инфраструктура ΠΈ интСрфСйсы Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΆΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

4️⃣ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΉΠ½ΡƒΡŽ модСль β€” "Π—Π°ΠΊΠ°Π· создан" β†’ "Π‘ΠΈΠ»Π»ΠΈΠ½Π³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ счёт" β†’ "БистСма ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ отправляСт письмо".

DDD Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΡ€ΡƒΡ‚ΠΎ, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹. Π’ΠΎΡ‚ основныС минусы ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ:

❌ 1. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ внСдрСния

DDD Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания бизнСс-процСссов. НуТно Π½Π΅ просто ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π° ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π²ΠΎΠΊΡ€ΡƒΠ³ бизнСса. Если ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Π°, получится монструозная систСма с ΠΊΡƒΡ‡Π΅ΠΉ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… сущностСй.

❌ 2. Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ для простых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

Если Ρ‚Ρ‹ дСлаСшь нСбольшой CRUD-сСрвис, Ρ‚ΠΎ DDD – это ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ контСксты, Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ события ΠΈ инфраструктурныС слои Ρ‚ΠΎΠ»ΡŒΠΊΠΎ услоТнят Тизнь.

❌ 3. Высокий ΠΏΠΎΡ€ΠΎΠ³ вхоТдСния

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠΈΠΌ ΠΊ классичСским Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌ, Π±ΡƒΠ΄Π΅Ρ‚ больно. Код становится ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, Π° навигация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания всСх контСкстов.

❌ 4. УслоТнСниС ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ

Если Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ систСму Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ контСксты Π±ΡƒΠ΄ΡƒΡ‚ постоянно Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, создавая Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΡƒΡŽ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° снова расползётся, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΡ‚ΠΎΠ½Π΅Ρ‚ Π² согласованиях.

❌ 5. Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ качСства ΠΌΠΎΠ΄Π΅Π»ΠΈ

Если Π½Π° стартС Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½Ρ‹, Ρ‚ΠΎ всё ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΠΎ Π½Π°ΠΊΠ»ΠΎΠ½Π½ΠΎΠΉ. ΠŸΠ΅Ρ€Π΅ΠΎΡΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π½Π° ΠΏΠΎΠ·Π΄Π½ΠΈΡ… этапах ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ.

❌ 6. Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ старта ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

DDD Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ бизнСсу Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΠΈΡ‡ΠΈ Π²Ρ‡Π΅Ρ€Π°. Π’ стартапах, Π³Π΄Π΅ Π²Π°ΠΆΠ½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΎΡ‰Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ с простого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° DDD Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ постСпСнно.

🎯 Когда DDD НЕ Π½ΡƒΠΆΠ΅Π½?

❌ Если ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ малСнький (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ CRUD)

❌ Если бизнСс Π΅Ρ‰Ρ‘ сам Π½Π΅ понял, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

❌ Если ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ

❌ Если ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ быстро Π²Ρ‹ΠΉΡ‚ΠΈ Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ

βœ… Когда DDD ΠΏΠΎΠ»Π΅Π·Π΅Π½?

βœ” Если систСма слоТная, с мноТСством бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»

βœ” Если ΠΊΠΎΠΌΠ°Π½Π΄Π° Π³ΠΎΡ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ модСлью

βœ” Если кодовая Π±Π°Π·Π° разрастаСтся ΠΈ становится нСуправляСмой

βœ” Если модСль Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ бизнСс-процСссы ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ

πŸš€ Π˜Ρ‚ΠΎΠ³

DDD β€” это Π½Π΅ просто красивая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, Π° философия проСктирования. Она Π΄Π°Ρ‘Ρ‚:

βœ… Π§ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°

βœ… ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ контСкстов

βœ… Π§Ρ‘Ρ‚ΠΊΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ

Но Ссли всё ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, DDD прСвращаСтся Π² хаос. πŸ˜… ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Π±Π΅Π· нСобходимости.

Если Ρ‚Π²ΠΎΠΉ ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π»Π°ΠΏΡˆΡƒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, врСмя ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ структуру. πŸ—

DDD β€” Ρ‚Π΅ΠΌΠ° нСпростая, поэтому ΠΊΠ½ΠΈΠ³ΠΈ Ρ‚ΡƒΡ‚ ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ. Π’ΠΎΡ‚ ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΠ° ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… источников:

πŸ“– "Domain-Driven Design: Tackling Complexity in the Heart of Software" β€” Π­Ρ€ΠΈΠΊ Эванс

Π­Ρ‚ΠΎ Библия DDD. Если Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ β€” Π±Π΅Ρ€ΠΈ ΠΈ Ρ‡ΠΈΡ‚Π°ΠΉ. ΠŸΡ€Π°Π²Π΄Π°, ΠΊΠ½ΠΈΠ³Π° нСпростая ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ тСрпСния.

πŸ“– "Implementing Domain-Driven Design" β€” Π’ΠΎΠ½ Π’Π΅Ρ€Π½ΠΎΠ½

Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Если послС Эванса ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ чувство "Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ?", Π’Π΅Ρ€Π½ΠΎΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ всС ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ.

πŸ“ "DDD Distilled" β€” Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π’ΠΎΠ½ Π’Π΅Ρ€Π½ΠΎΠ½, Π½ΠΎ Π² сТатом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

Если Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ²ΠΈΠ½Ρ‚ΡΡΡΠ΅Π½Ρ†ΠΈΡŽ DDD Π±Π΅Π· лишнСй Π²ΠΎΠ΄Ρ‹ β€” ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ старт.

πŸŽ₯ БСрия Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ Π’ΠΎΠ½ Π’Π΅Ρ€Π½ΠΎΠ½Π° Π½Π° YouTube

МоТно Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсных выступлСний, Π³Π΄Π΅ ΠΎΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ аспСкты DDD.

πŸ›  Hands-on DDD

На GitHub Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… DDD, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

github.com/citerus/dddsample-core (эталонный ΠΏΡ€ΠΈΠΌΠ΅Ρ€)

github.com/ddd-by-examples/library (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ DDD Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅)

Мой Π’Π“