Моделі дизайну для початківців
Якщо ви вже писали програми для продуктів або програмного забезпечення, великі/малі, ви, найімовірніше, використовували багато шаблонів проектування… хоча можливо, що вони не є одними з найбільш використовуваних/стандартних шаблонів проектування.
Але так, існує очевидна різниця між реалізацією шаблону проектування та «використанням» шаблону проектування… у будь-якому випадку людина, яка працює з шаблонами проектування, це розуміє або легко зрозуміє.
Справа в тому, що шаблони проектування не є новинкою для програмістів.
У цій статті я намагаюся пояснити основи дизайну, а в іншій статті ми вивчимо деталі різних шаблонів, приклади тощо.
Що таке шаблон проектування?
Починати…
Я вважаю, що найкращий спосіб почати з розуміння шаблонів проектування – це зрозуміти нетехнічні шаблони, яких ми свідомо/несвідомо дотримуємося у повсякденному житті.
Для прикладу візьмемо багато резюме, поданих на вакансію. Резюме кожного виглядає по-різному… хоча всі вони прагнуть робити те саме, тобто розповідати читачеві, у чому вони вміють, або як він/вона може підійти для роботи.
Більшість із них, які подають резюме на роботу, знають, що їм потрібно подати резюме з певним набором інформації у відформатованому документі Word.
Це… шаблон, коли кожен подає резюме з певним набором інформації, вираженої в ньому.
Якщо вам хочеться… називайте це шаблонами замість шаблонів. Шаблони оформлення.
У реальному житті є багато таких речей, які є шаблонами. Деяким людям подобаються наведені нижче приклади:
Усі кухарі в усьому світі готують піцу чи картоплю фрі однаково. Хоча вони можуть по-різному наповнювати / смакувати. Це шаблон.
Конструкція кожного автомобіля відповідає базовому зразку конструкції, чотири колеса, кермо, основна система приводу, як-от акселератор-розривна муфта тощо.
Усі речі, які багаторазово створювали/виробляли, неминуче повинні слідувати шаблону у своєму дизайні… будь то автомобілі, піца, банкомати, що завгодно… навіть зубна щітка.
Проекти, які майже стали стандартним способом кодування певної логіки/механізму/техніки в програмному забезпеченні, тому стали відомі як – і, отже, – досліджені як шаблони проектування програмного забезпечення.
Чому шаблон дизайну важливий?
В основному з двох причин:
- Щоб дотримуватися стандарту
- Прискорити розвиток
Поясню детально.
По-перше, ми розуміємо, чому дотримання стандартного шаблону цікаве.
Давайте візьмемо приклад списку резюме, який ми обговорювали раніше.
Можливо, є один чи два кандидати, які надсилають свої заявки на роботу електронною поштою без належного форматування, без вкладень до своєї електронної пошти тощо, .. ці один чи два претенденти не дотримуються шаблону .. і МАЛО ймовірно, що закінчаться з роботою… чому? Тому що вони відхиляються від усталеної моделі, яка може не сподобатися людям, які збирають резюме для роботи.
Невже немає тих, хто відхиляється від шаблону і стає «крутим»? Хіба це не інновація?
Так, бувають випадки, коли дуже різне подане резюме отримує роботу за те, що воно відрізняється від інших. Зазвичай я чув про веб-дизайнерів, які отримали найкращі посади, тому що вони зібрали та представили фільм про свою роботу на компакт-диску або зробили анімаційного персонажа, який пояснює свою роботу, розмістили це у своєму блозі тощо.
Але.. це експеримент (Інновація приходить від успішних експериментів).
Найчастіше під час розробки програмного забезпечення ви не можете дозволити собі експериментувати через обмеження часу, очікування тощо, але так, інколи деякі цікаві проекти дозволяють експериментувати.
У програмному забезпеченні ми не можемо робити такі базові речі, як банківський депозит… 101 способом… буде лише кілька способів обробки банківського депозиту.. тому має сенс дотримуватися встановленого та перевіреного шаблону.
Крім того, більшість шаблонів дизайну мають варіації… деякі варіації настільки популярні, що варіації також будуть новим стандартним типом шаблону.
У наші дні очікується (принаймні неявно), що проекти програмного забезпечення будуть слідувати вже створеному дизайну подібного продукту/програмного забезпечення на ринку.
Саме тут дотримання стандартного стилю кодування чи шаблону дизайну допомагає розробці програмного забезпечення… прискоренню розробки, усуненню накладних витрат, пов’язаних із турботою про нову неперевірену реалізацію тощо,
Час розробки кріплення
Дотримання стандартного шаблону проектування також має перевагу легкого спілкування через дерево/ієрархію архітекторів програмного забезпечення, лідерів модулів, керівників команд, розробників тощо щодо того, «як» щось потрібно розробити, а не лише «що» має бути розроблений.
Іноді це навіть допомагає командам тестування, оскільки тестувальники з досвіду знають, що код, який відповідає певним шаблонам дизайну, ймовірно, можна перевірити певним чином за допомогою набору інструментів тестування протягом певного періоду часу, і такі відомі дизайни можуть не мати недоліків. або мають деякі «відомі» недоліки.
Хіба використання шаблонів дизайну не додає індивідуальності?
Ні. По-перше, тому що ми не кажемо, що ви слідуєте шаблону дизайну, і нічого іншого не відбувається. Більшість реалізацій проектів мають лише базові вимоги до інших проектів і, швидше за все, матимуть відхилення. Побудова цих відхилень вимагатиме згинання та розтягування стандартних шаблонів, які використовуються у реалізації.
Це схоже на приготування піци стандартним способом, а потім її смакування/представлення за різними вимогами, як повну піцу, або розрізаний пиріг, або будь-що інше.
У розумінні важливості шаблонів проектування одна річ є дуже важливоюважливо :
Патерни проектування – це не будь-яка технологія чи структура, яку нав’язує нам певна компанія чи мова програмування. Це означає, що це схоже на відкриту концепцію.. ви можете брати її, використовувати, змінювати відповідно до своїх потреб і, що важливо… відчувати її власною.
Насправді всі стандартні або популярні шаблони проектування можна досить сильно розширювати.. вони стали популярними, по-перше, лише тому, що багато людей використовують їх.. і багато людей використовують їх лише тому, що вони гнучкі до своїх вимог.
Або як, на вашу думку, стандартний шаблон дизайну підійде для проекту в Нью-Джерсі для компанії, а також у Бангалорі для іншої компанії та іншого типу проекту.
Це підводить нас до «Більшість шаблонів проектування є загальними »… тобто вони не завжди використовуються для створення програмного забезпечення того самого типу. Ви можете не почути такі речі, як «шаблон проектування банківського програмного забезпечення» або «шаблон проектування програмного забезпечення для соціальних мереж», які використовуються в поширених обговореннях… а лише «шаблони проектування».
Кого повинні турбувати шаблони дизайну?
- Подібно до того, як хороший будівельний архітектор розвиває свої навички проектування будівель, вивчаючи архітектуру та дизайн численних будівель і форм протягом свого/її життя, архітектор програмного забезпечення повинен вивчати та візуалізувати, як різні програмні/технологічні системи в усьому світі проектуються чи архітектурний.
- І так само, як будівельники будівлі повинні знати про різні способи реалізації проекту будівлі, або з власного досвіду, або через розуміння цього від архітектора будівлі.
Розробники програмного забезпечення/програмісти повинні розуміти базові шаблони проектування програмного забезпечення та код їх реалізації… або самі, або через архітектора програмного забезпечення, який доручає команді розробити його за певним шаблоном.
Основні шаблони коду
У перших рядках цієї статті я сказав, що будь-який програміст використав би шаблони проектування. Ось кілька дуже простих прикладів коду, що слідує шаблону.
-
Нижче наведено базовий шаблон проектування фільтра перехоплення .
-
Приховати копію коду
-
switch (condition){ case Value1: case Value2: default: }
-
Тригери подій, обробники подій… підпадають під базовий шаблон проектування Subject-Observer . Незабаром ми обговоримо кожен шаблон, стандарти, популярні варіанти з прикладами..
-
Якщо ви використовували певні колекції, наприклад Arraylist у C#, і проходили через масив, тоді ви використовували базовий шаблон проектування Iterator .
-
Наведений нижче код є прикладом базового шаблону обробки винятків/ ланцюжка відповідальності.
-
Приховати копію коду
-
try{ }catch(Exception ex){ } finally{ }
Різні області шаблонів проектування
У програмному забезпеченні існують різні термінології, крім шаблонів проектування.. деякі з них часто пов’язані з шаблонами проектування, які ми досі обговорювали.. а деякі з них зовсім не пов’язані.
Те, що ми обговорювали вище, іноді називають «шаблони проектування реалізації ».
Є й інші, як -от шаблони архітектури, шаблони фреймворку, шаблони мови (здебільшого їх називають мовними конструкціями).
Це шаблони, закладені на різних рівнях… наприклад, мовні шаблони — це шаблони, реалізовані як частина мов програмування, таких як C# / Java, як особливості / конструкції мови… деякі з них ми вже бачили.
Усі наведені вище приклади суб’єкта-спостерігача, перехоплюючого фільтра тощо поглинаються як мовні конструкції в усіх популярних мовах програмування високого рівня, які з’явилися після C.
Архітектурні шаблони — це стандартні моделі архітектури програмного забезпечення, які зазвичай стосуються різних методів розміщення чи зв’язування модулів, рівнів або рівнів, що створює повну програму.
Це абсолютно не пов’язано з шаблонами проектування в сенсі кодування/програмування, яке… але вони мають однакові відповіді на запитання Чому/Що, як обговорювалося в цій статті.
Шаблони фреймворків також не мають відношення до нашого обговорення шаблонів проектування. Коли такі фреймворки, як .NET, реалізують спеціальні засоби для реєстрації помилок або легкого відстеження маршрутів виконання коду через вбудовані методи чи об’єкти фреймворку, такі механізми називаються шаблонами фреймворку.
Деякі приклади в .NET Framework включають функцію stackTrace, функцію атрибута класу з [] квадратними дужками поверх визначень класу/методу тощо. Використовуючи такі функції, ми кодуємо за допомогою вбудованих шаблонів Framework.
Я сподіваюся, що ця стаття допоможе надати огляд шаблонів проектування та відповідної термінології.
Поки що ми лише обговорювали, що таке стандарти та наскільки вони важливі.. але ми не обговорювали, що таке самі стандартні шаблони.
Ліцензія
Ця стаття разом із будь-яким пов’язаним із нею вихідним кодом і файлами надається під ліцензією The Code Project Open License (CPOL).