Укр Рус
Патерни проєктування

Патерни проєктування

  • 25 квітня
  • читати 7 хв
Денис Розганяєв
Денис Розганяєв Software Engineer у SoftServe, Викладач Комп'ютерної школи Hillel.

Досить часто розробники, які тільки починають свій шлях, чують про патерни проєктування, але не завжди розуміють, що це і для чого.

В цій статті ми розберемо детальніше це поняття та з’ясуємо, чим шаблони проєктування можуть бути корисні для нас.

Що таке патерни?

В інтернеті та книжках можна знайти дуже багато різних визначень стосовно цього поняття. Є легкі варіанти визначень, а є і більш академічні визначення.

Для мене найкомфортнішим визначенням є наступне:

Патерн проєктування, або патерн програмування — це типовий спосіб вирішення певної проблеми, що часто зустрічається при проєктуванні архітектури програм.

З цього визначення ми можемо зрозуміти, що патерн — це не готовий код ,який ми можемо скопіювати собі в проєкт. Завдяки патерну та його інструкціям, розробник може написати свій варіант вирішення проблеми в контексті своєї програми.

Також варто розуміти що патерн — не алгоритм. Ці поняття часто плутають, хоча вони дійсно обидва описують рішення відомих проблем, але алгоритм — це чіткий набір дій, в той час як патерн — це високорівневий опис рішення, реалізація якого може відрізнятися у двох різних програмах.

Навіщо знати патерни?

Насправді, ви можете не знати жодного патерну і при цьому успішно працювати над проєктуванням ПЗ. Більш того, іноді розробник, який не знає про патерни, може їх використовувати в проєкті, просто не підозрюючи про це.

Саме свідоме володіння інструментом відрізняє професіонала від аматора. Ви можете вкрутити саморіз за допомогою дрилі, а можете й забити його молотком. Але професіонал знає, якщо закрутити дрилем, то тримати буде краще.

Отже, навіщо знання патернів? Я б виділив 3 основних пункти:

  • Перевірені рішення — не потрібно створювати велосипед, якщо ви знаєте про готові рішення і можете їх використовувати. Це зекономить більше часу на розробку іншого функціоналу

  • Стандартизація коду — Майже всі приховані проблеми в уніфікованих рішеннях вже давно знайдено, що значно полегшує проєктування

  • Загальний словник програмістів — Достатньо вимовити назву патерну, замість того, щоб пояснювати іншим розробникам про круте рішення, яке ви знайшли

Класифікація патернів

Патернів проєктування досить велика кількість, вони можуть відрізнятися за рівнем складності, деталізації та охопленням проєктованої системи.

Найбільш низькорівневі та прості патерни — ідіоми. Вони не дуже універсальні, позаяк мають сенс лише в рамках однієї мови програмування.

Найбільш універсальні — архітектурні патерни, які можна реалізувати практично будь-якою мовою. Вони потрібні для проєктування всієї програми, а не окремих її елементів.

Також патерни відрізняються і за призначеннями (категоріями):

  • Породжуючі патерни відповідають за гнучке створення об’єктів без внесення в програму зайвих залежностей

  • Структурні патерни показують різні способи побудови зв’язків між об’єктами

  • Поведінкові патерни дозволяють налагодити ефективну комунікацію між об’єктами

Які патерни використовуються в фреймворках?

Фреймворки використовують велику кількість патернів як для внутрішнього (core) функціоналу, так і для зовнішнього використання, надаючи розробникам певний інтерфейс для побудови додатків. Які ж патерни використовують фреймворки? Оскільки я працюю з Laravel фреймворком, наведу приклади саме з нього.

З «коробки» Laravel дає можливість використовувати функціонал, який вже є частиною патернів, наприклад, Facade класи для швидкого доступу до певного функціоналу.

  • Builder, який активно використовується в моделях, роутерах і інших компонентах.
  • Observer, фреймворк дає можливість створювати свої івенти і, наприклад, стежити за подіями моделей.
  • Навіть при створенні middleware ми використовуємо патерн Proxy.

Це далеко не всі патерни, котрі можна побачити в фреймворку. Всі описані патерни є частиною функціоналу фреймворку, який надається розробникам для створення додатків.

Під «капотом» Laravel використовує більше патернів.

Висновок

Це була ознайомча стаття про патерни проєктування, ми розглянули що це таке, як можна і коли можна використовувати та як вони використовуються в фреймворку.

Для більш детального ознайомлення з цією темою я б порадив прочитати книгу «Gangs of Four (GoF) Design Patterns». В книжці дуже детально розказується про патерни, оскільки автори і придумали більшість з них. Якщо книжка з академічними термінами складно дається вам, то найкращим варіантом буде мій улюблений ресурс RefactoringGuru. Це чудовий сайт, де ви можете знайти все про патерни та рефакторинг.

В наступній статті поговоримо з вами про породжуючі патерни, найпопулярніші патерни з цієї категорії, та про те, як і де використовуються.

Придбати подарунковий сертифікат

Придбати подарунковий сертифікат

Gift certificate background image Gift certificate background image