Skip to content

tshemsedinov/Patterns-JavaScript

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 

Repository files navigation

🧩 ΠŸΠ°Ρ‚Π΅Ρ€Π½Ρ‹ для JavaScript, TypeScript ΠΈ Node.js

ΠŸΠ΅Ρ€Π΅ΠΎΡΠΌΡ‹ΡΠ»Π΅Π½ΠΈΠ΅ GRASP (раздСлСния отвСтствСнности - General Responsibility Assignment Software Patterns), SOLID (СдинствСнной отвСтствСнности, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ-Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ, подстановки Лисков, раздСлСния интСрфСйсов, инвСрсии зависимостСй), GoF (Π‘Π°Π½Π΄Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… - Gang of Four) для Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° (Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) & Π±Π΅ΠΊΠ΅Π½Π΄Π° (node.js, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΡ‹) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° JavaScript ΠΈ TypeScript

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹: EN, UA, RU.

  • 🧩 ΠŸΠ°Ρ‚Π΅Ρ€Π½Ρ‹
    • πŸ“’ GoF ΠΏΠ°Ρ‚Π΅Ρ€Π½Ρ‹ для Node.js ΠΈ JavaScript (Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ сСминара)
    • 🏭 ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹
      • Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° (Abstract factory) β€” создаСт связанныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· сСмСйств, Π±Π΅Π· указания ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… классов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.
      • Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ (Builder) β€” пошаговая сборка слоТного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, часто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡Π΅ΠΈΠ½ΠΈΠ½Π³Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Query Builder ΠΈΠ»ΠΈ Form Generator.
      • Π€Π°Π±Ρ€ΠΈΠΊΠ° (Factory) β€” функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами: сборки ΠΏΠΎ частям ΠΈΠ· Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‡Π΅Ρ€Π΅Π· примСси, setPrototypeOf.
      • Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Factory method) β€” Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½ΡƒΡŽ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ для создания экзСмпляра, Π² JavaScript это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· if, switch ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ конструктора ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.
      • ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ (Prototype) β€” ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ экзСмпляра, для экономии рСсурсов Π½Π° созданиС (Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½Ρ‹ΠΌ наслСдованиСм, ΠΎΠ½ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ Flyweight).
      • Flyweight β€” экономия выдСлСния памяти для Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· проброс доступа ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ (раздСляСмому) ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ инстанса.
      • ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° (Singleton) β€” Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ СдинствСнному экзСмпляру, часто ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π°Π½Ρ‚ΠΈ-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ, ΠΏΡ€ΠΎΡ‰Π΅ всСго Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· кэш систСмы ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ESM/CJS.
      • Object Pool β€” ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π·Π°Ρ€Π°Π½Π΅Π΅ созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для экономии рСсурсов ΠΏΡ€ΠΈ частом создании ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ.
    • 🀝 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹
      • АдаптСр (Adapter) β€” ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ нСсовмСстимый интСрфСйс Π² совмСстимый, позволяя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сторонний ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Π΅Π· измСнСния Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.
      • ΠžΠ±Π΅Ρ€Ρ‚ΠΊΠ° (Wrapper) β€” ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ с пробросом Π²Ρ‹Π·ΠΎΠ²Π° (Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ повСдСния, частный случай ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Adapter.
      • Boxing β€” ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ для добавлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ интСрфСйсов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΡƒΠ·ΠΈΡ‚ΡŒ String Π΄ΠΎ AddressString.
      • Decorator β€” динамичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· наслСдования, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ синтаксис, ΠΏΠΎ сути добавляСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.
      • ΠŸΡ€ΠΎΠΊΡΠΈ (Proxy) β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, пСрСхватывая Π²Ρ‹Π·ΠΎΠ²Ρ‹, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Π»Π΅Π½ΠΈΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ бСзопасности, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π² GoF ΠΈΠ»ΠΈ встроСнным Π² JavaScript Proxy.
      • ΠœΠΎΡΡ‚ (Bridge) β€” Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ абстракций Π·Π° счСт ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ, позволяя ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ нСзависимо.
      • ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ (Composite) β€” Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DOM ΠΈΠ»ΠΈ файловая систСма.
      • Ѐасад (Facade) β€” ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ доступ ΠΊ слоТной систСмС, прСдоставляя ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ) Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΈ понятный интСрфСйс, для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈ сокрытия слоТности.
      • ЛСгковСс (Flyweight) β€” экономия выдСлСния памяти для Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· проброс доступа ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ (раздСляСмому) ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ инстанса.
    • ⚑ ΠŸΠΎΠ²Π΅Π΄Π΅Π½Ρ‡Π΅ΡΠΊΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹
      • Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ° обязанностСй (Chain of responsibility) β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² для Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ отвСтствСнного, всС Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚, Π½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½.
      • Middleware β€” Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠ°ΠΊ CoR, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ дальшС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π³ΠΎΠ½ΠΊΠ΅, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ, ошибкам.
      • Команда (Command) β€” инкапсулируСт дСйствиС (запрос исполнСния) ΠΈ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ± ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŽ, ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎοΏ½οΏ½ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄.
      • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ (Interpreter) β€” рСализация языка (DSL - domain specific language) ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² AST (абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ) с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ.
      • Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ (Iterator) β€” ΠΎΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° поэлСмСнтно, Π±Π΅Π· доступа ΠΊΠΎ всСм Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² GoF, Π½ΠΎ Π² JavaScript Π΅ΡΡ‚ΡŒ встроСнныС Iterator ΠΈ AsyncIterator.
      • ΠŸΠΎΡΡ€Π΅Π΄Π½ΠΈΠΊ (Mediator) β€” оптимизация взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ N ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ N * (N - 1) / 2 связСй, Π° цСнтрализация взаимодСйствия сниТаСт Π·Π°Ρ†Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΎ N.
      • Π‘Π½ΠΈΠΌΠΎΠΊ (Memento) β€” сохранСниС ΠΈ восстановлСниС истории снимков состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π±Π΅Π· прямого доступа ΠΊ самому ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ.
      • ΠΠ°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒ (Observable) β€” ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ подписчиков ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
      • БостояниС (State) β€” рСализация ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° (Automaton ΠΈΠ»ΠΈ FSM), Π³Π΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ - это ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, Π° состояниС добавляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ мСняСтся Π½Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ….
      • БтратСгия (Strategy) β€” Π²Ρ‹Π±ΠΎΡ€ взаимозамСняСмого повСдСния Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², классов.
      • Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Template method) β€” фиксируСт шаги Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, позволяя подклассам ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ шаги, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ шаги ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΊΠ°ΠΊ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
      • ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ (Visitor) β€” позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π±Π΅Π· измСнСния ΠΈΡ… классов, раздСляя структуру ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½Π° нСсколько абстракций.
      • ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ конструктор (Revealing Constructor) - ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ повСдСния Π±Π΅Π· наслСдования, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ повСдСния Π² конструктор Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, содСрТащСго ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ описаниС.
      • Actor β€” Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ состояниС ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, взаимодСйствуя асинхронно Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сообщСний Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡƒΡ‚Ρ‘ΠΌ изоляции состояния Π°ΠΊΡ‚ΠΎΡ€Π°.
      • Reactor (event-loop) β€” ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ события синхронно, помСщая ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ направляя зарСгистрированным ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ²Π΅Ρ€Ρ… синхронного Ρ†ΠΈΠΊΠ»Π° событий. Часто примСняСтся Π² систСмах с интСнсивным I/O, упрощая ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ событиями.
      • Proactor β€” Π¦ΠΈΠΊΠ» событий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ внСшним Π°Π³Π΅Π½Ρ‚ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, I/O подсистСмой), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (возвращая Π΄Π°Π½Π½Ρ‹Π΅ Π² callback).
    • πŸ—ƒοΈ Π¨Π°Π±Π»ΠΎΠ½Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ
      • Transaction Script β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ шаблон, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ каТдая бизнСс-опСрация рСализуСтся ΠΊΠ°ΠΊ функция (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ»ΠΈ скрипт).
      • Pattern SAGA β€” шаблон распрСдСлённой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ слоТный бизнСс-процСсс разбиваСтся Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°Π»Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ дСйствиС Π½Π° случай сбоя. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ распрСдСлённых Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.
      • Unit of Work β€” шаблон отслСТиваСт измСнСния Π² бизнСс-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ сохранСниС ΠΊΠ°ΠΊ ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π² ORM ΠΈΠ»ΠΈ Repository, инкапсулируя всю Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
      • Table Module β€” шаблон, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вся домСнная Π»ΠΎΠ³ΠΈΠΊΠ°, связанная с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, инкапсулируСтся Π² ΠΎΠ΄Π½ΠΎΠΌ классС ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΏΡ€ΠΈ этом строки Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ простыС Π΄Π°Π½Π½Ρ‹Π΅.
      • Value Object β€” нСизмСняСмый, ΡΠ°ΠΌΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ Π² Π΄ΠΎΠΌΠ΅Π½Π΅ Π±Π΅Π· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выраТСния Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ согласованности Π»ΠΎΠ³ΠΈΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, сравнСния ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² типобСзопасной, явно Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.
      • Null Object β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ стандартный интСрфСйс, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Β«do-nothingΒ». ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для избСТания ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π° null, упрощСния Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ обСспСчСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ бСзопасности. ЯвляСтся Π·Π°ΠΌΠ΅Π½ΠΎΠΉ дСйствия "ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ", ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‰Π΅ΠΉ условныС конструкции ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Π³Π²Π°Ρ€Π΄Ρ‹.
      • Active Record β€” Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ запись Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для нСпосрСдствСнного выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ CRUD (созданиС, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅) ΠΈ спСцифичных запросов ΠΊ сСбС.
      • Data access object (DAO) β€” абстракция, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ интСрфСйс для сохранСния ΠΈ извлСчСния Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², изолируя Π΄ΠΎΠΌΠ΅Π½Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.
      • Data transfer object (DTO) β€” Π°Π½Π΅ΠΌΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅) Π±Π΅Π· Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ повСдСния, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ структурированных Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ слоями, модулями, подсистСмами ΠΈΠ»ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ.
      • Data Access Layer (DAL) β€” слой, Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ доступ ΠΊ мноТСству DAO ΠΈΠ»ΠΈ сырых источников Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ шаблон Facade. Часто Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ трансформации Π΄Π°Π½Π½Ρ‹Ρ….
      • Repository β€” Π΄ΠΎΠΌΠ΅Π½Π½ΠΎ-цСнтричная абстракция для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ сущности, Π° Π½Π΅ сырыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ DTO.
      • Π‘ΠΌ. Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹: Template method, Actor, State, Memento
  • 🧩 Π¨Π°Π±Π»ΠΎΠ½Ρ‹ (ΠΏΠ°Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹) GRASP
  • 🧩 Π¨Π°Π±Π»ΠΎΠ½Ρ‹ (ΠΏΠ°Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹) SOLID