Патерни проектування - це способи мислення про програмування.
Вони є збіркою порад, готових практик, передового досвіду та інсайтів щодо розвитку. Для кожної парадигми програмування та типу завдань існують певні шаблони проектування, які найкраще підходять.
У програмуванні розв'язання певних типів задач повторюється, тому є сенс вибрати один метод розв'язання цих задач і постійно повторювати його.
Основна перевага виникає особливо під час командної розробки, коли всі знають, як буде розроблятися додаток (за яким шаблоном проектування) і просто застосовують його. Це позбавляє від зайвих десятків годин налагодження незрозуміло написаного коду і спроб зрозуміти принципи, які мав на увазі автор.
Мій улюблений патерн проектування - MVC (від англ. Model View Controller), який говорить, що додаток ділиться на 3 незалежні шари, які послідовно викликають один одного і передають один одному дані.
Наприклад, при рендерингу сторінки може виглядати так, що вона спочатку вирішує, який це тип сторінки (наприклад, деталізація категорії), тому викликає CategoryController
з методом detail
.
Конкретний приклад (я дуже спрощую):
class CategoryController{public CategoryManager $categoryManager;public function actionDetail(string $id): void{$this->template->id = $id;$this->template->category = $this->categoryManager->getById($id);}}
Примітка: Примітка:.
Це лише приклад коду, який пояснює принцип роботи шаблону проектування
MVC
.У реальній реалізації довелося б додатково розібратися, як, наприклад, отримати екземпляр
CategoryManager
і як передати його у власність. Як правило, для цього типу завдань використовується "ін'єкція залежності".
Перед рендерингом сторінки для реквізиту категорії спочатку викликається CategoryController
для отримання власне запиту (тобто ми рендеримо реквізит категорії з певним ID, який отримується маршрутизатором, наприклад, в URL), отримання даних (запитом до відповідної Model
) і передачі фінальних даних шаблону для рендерингу.
Величезною перевагою цього принципу є те, що ми можемо писати багато моделей (логіка програми), які не залежать від способу представлення даних (шаблону), що призводить до багаторазового використання коду. Фактично, якщо ми хочемо використати CategoryManager
в іншому проекті, ми просто передаємо дані через Controller
певним чином, які будуть відображені за шаблоном, визначеним самим проектом, при цьому логіка додатку залишається незмінною і нікого не хвилює, тому що програмний рівень виконав свій узгоджений інтерфейс та обов'язки.
Практична порада:.
Паттерн проектування "MVC" використовується більшістю сучасних фреймворків, таких як Nette, Symfony, Laravel та інших.
Ми також можемо зіткнутися з "MVC" при розробці мобільних додатків та інших типів програмного забезпечення, де нам потрібно отримати дані та відобразити їх у шаблоні відповідно до типу сторінки або подання.
Взагалі в програмуванні існує багато шаблонів проектування, які не підходять для веб-розробки. У цьому переліку описані найважливіші патерни, які я використовую сам і з якими ви повинні бути знайомі.
З повним переліком усіх шаблонів дизайну, прикладами їх використання та детальними поясненнями можна ознайомитися на окремій сторінці.
Adapter
перетворює дані з одного типу в інший (як правило, перетворює нативні типи даних PHP в типи даних бази даних і назад).Існує набагато більше шаблонів дизайну, це були найважливіші, про які вам варто знати.
Деякі методи розробки програм вважаються "антипаттернами", що є повною протилежністю паттерну проектування. Зазвичай це техніка, яка виробляє дивний код, що не піддається налагодженню, підтримці та поводиться "магічно".
Типовим прикладом є використання глобальних змінних.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk