← Як запамʼятати зрозуміти патерни проєктування?
docs: English JsonRpcBundle docs, REST and MCP Bundle sections, package cards
uk/articles/from-tg/architecture/design-patterns.md
новий файл +80
−0
1
+
# Як запамʼятати зрозуміти патерни проєктування?
2
+
3
+
Ті, хто проходили мої курси, вже знайомі з цими порадами, але я повторю їх для інших читачів.
4
+
5
+
Колись я, як і більшість із вас, зубрив патерни перед співбесідою і тримав схрещені пальці, щоб тільки не спитали. А потім — спокійно видихав і забував про них до наступного разу.
6
+
7
+
Але коли я все ж вирішив з ними розібратися — зрозумів, що частину з них я й так використовую майже щодня в роботі, просто не знав, що це патерн і як він називається.
8
+
9
+
Тому я випрацював для себе схему, як їх зрозуміти.
10
+
11
+
## 1. Не зубріть патерни теоретично — реалізовуйте їх
12
+
13
+
- Щоб запамʼятати, як працює патерн — його треба реалізувати, тобто написати руками.
14
+
- А якщо все ж хочете легко їх завчити, то вчіть по їх типах (структурні, поведінкові та породжувальні).
15
+
16
+
Так буде легше співвіднести назву з розумінням, для чого він, і тоді ніколи не стане необхідності порівняти стратегію з фабрикою, бо вони відносяться до різних груп.
17
+
18
+
А порівнювати логічно те, що схоже, а не те, що різне.
19
+
20
+
## 2. Починайте не з назви, а з проблеми
21
+
22
+
Патерн — це не заклинання. Це рецепт вирішення конкретної проблеми.
23
+
24
+
Тому вчити треба так:
25
+
26
+
> "Є така-то проблема → вона вирішується таким, таким і таким патерном."
27
+
28
+
Таке мислення запамʼятовується та потім працює і на співбесіді, і на практиці.
29
+
30
+
## 3. Асоціюйте поведінку, яку описує патерн, з чимось для вас знайомим
31
+
32
+
Щоб швидко зрозуміти суть — звʼяжіть її з чимось знайомим.
33
+
34
+
Наприклад, `Builder` можна порівняти з реальним прорабом на будівництві.
35
+
36
+
Ми проговорюємо йому всі побажання в довільному порядку, він все записує, складає правильний порядок робіт, але працювати почне лише коли ми дамо йому гроші.
37
+
38
+
```php
39
+
$builder = new HouseBuilder();
40
+
41
+
$builder
42
+
->setWalls('цегляні')
43
+
->setRoof('металева')
44
+
->setWindows('панорамні')
45
+
->setGarage('на дві машини')
46
+
->setFloorCount(2)
47
+
->setHasBasement(true)
48
+
->setFence('деревʼяний')
49
+
//...
50
+
->setSecuritySystem('Ajax');
51
+
52
+
//...
53
+
// Прораб виставляє рахунок, який ми сплачуємо
54
+
$builder->getInvoice()->pay();
55
+
56
+
//...
57
+
// І будує лише якщо він сплачений
58
+
if ($builder->getInvoice()->isPaid()) {
59
+
$house = $builder->build();
60
+
}
61
+
```
62
+
63
+
## 4. Зробіть сайт refactoring.guru своїм настільним чтивом
64
+
65
+
Якщо ще цього не зробили — зробіть [refactoring.guru](https://refactoring.guru/uk/design-patterns) своїм настільним чтивом.
66
+
67
+
Читайте по одній статті у вільний час:
68
+
69
+
- на перекурі,
70
+
- під ранкову каву,
71
+
- сидячи на унітазі (хоча ця порада не для всіх 😉).
72
+
73
+
## Висновок
74
+
75
+
> Патерни — це не страшилка для співбесіди, а спосіб мислення.
76
+
> Коли ти їх розумієш, а не просто знаєш назви, — ти починаєш бачити їх у реальних задачах, і тоді більше не доводиться вигадувати велосипед кожного разу.
77
+
78
+
---
79
+
80
+
*Вперше опубліковано в Telegram-каналі [«Створений щоб помирати»](https://t.me/php_while_true/16) 20.06.2025.*