Як запамʼятати зрозуміти патерни проєктування?

← Як запамʼятати зрозуміти патерни проєктування?

Ashterix

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.*