Що робити, якщо я не буду використовувати шаблони дизайну програмного забезпечення? [зачинено]


17

З якими проблемами я можу зіткнутися, якщо не буду використовувати шаблони дизайну програмного забезпечення? Чи можете ви розповісти про проблеми підходу до проектування за допомогою стандартних об'єктно-орієнтованих прийомів?


24
Досить багато очевидних моделей дизайну програмного забезпечення. Ви повинні знати їх дуже добре, щоб бути впевненими, що ви їх не використовуєте - напевно, досить добре, що ви могли б також ними користуватися!
James McLeod

18
Як бічна сторона до @JamesMcLeod, багато "Шаблони дизайну" є дуже очевидними, і все, що кожен би робив у будь-якому випадку. Чому ми тоді даємо їм імена? Для цілей спілкування. "Я використовую шаблон X" має набагато більшу смислову щільність, ніж пояснення вашого рішення, сподіваючись, що інший кінець піде "О так! Я теж це зробив, за винятком того, що я назвав свої змінні ...".
Фоши

7
@AJMansfield Деякі з найгірших кодів, які я бачив, стосувались надмірної музики для дизайнерських моделей.
Erik Reppen

5
@ErikReppen провину за надмірне використання дизайнерських моделей слід покласти на того, хто це робить. З моєї точки зору, основна проблема полягає не в самих моделях проектування, а в надмірній генералізації (частково через відсутність архітектурного нагляду) та надмінній інженерії (іноді інженерних комітетах).
rwong

5
"Шаблони дизайну" - це лексика, а не техніка.
Kaz Dragon

Відповіді:


76

Ви пропускаєте суть.

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

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

Тож два ключових моменти я намагаюся зробити:

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

12
+1: Абсолютно правильно. Я почав розробку ОО до того, як моделі дизайну стали відомими або популярними. Так, ми також винайшли такі речі, як фабрики, одинаки та щось таке, що, коли ти примружився до цього в яскравому світлі, схоже на зразок стратегії. Справа в тому , тепер, коли я знаю , що шаблони проектування Я знаю , що заводи були в порядку , але можна було б зробити краще, то Singletons були погано зроблено і що могло б шаблон стратегія була б набагато краще , якби він на справді був шаблон стратегії.
Бінарний занепокоєння

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

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

+1 для порівняння з фізичними структурами. Я додам, що це допомагає побудувати будинок, якщо ви вже знаєте, що «ферма» - це хороша конструкція для підтримки навантаження на дах, а не експериментує і сподівається, що вона не зруйнується.
kdgregory

39

Ті, хто не може згадати минуле, засуджуються повторити його.

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

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


10
"Кожна цитата має рівне і протилежне котирування". "Ми повинні зірвати минуле, якщо ми справді заслужили майбутнє". (Добре, що одним був Гітлер, тому, мабуть, найкраще ігнорувати це ....)
Рассел

20

З якими проблемами я можу зіткнутися, якщо не буду використовувати шаблони дизайну програмного забезпечення?

У вас виникне проблема не в змозі написати жодне програмне забезпечення.

Змінні - це модель дизайну.

Методи - модель дизайну.

Оператори - додавання, віднімання тощо - це модель дизайну.

Заяви - модель дизайну.

Цінності - модель дизайну.

Посилання - це модель дизайну.

Вирази - модель дизайну.

Заняття - це модель дизайну.

...

Все, чим ви займаєтесь програмуванням, - це модель дизайну . Більшу частину часу візерунок настільки вбудований у ваше мислення, що ви перестали думати про нього як про "шаблон дизайну". Те, що вам доведеться вивчити, як "однотонний візерунок" і так далі, - це просто шаблони, які ще (ще) не були викладені будь-якою мовою, якою ви користуєтесь.

Чи можете ви розповісти про проблеми підходу до проектування за допомогою стандартних об'єктно-орієнтованих прийомів?

Ні. Я поняття не маю, що означає це питання. Шаблони дизайну - це "стандартні об'єктно-орієнтовані методики" - саме це і робить їх моделями дизайну . Шаблон дизайну - це стандартна методика вирішення певної проблеми, особливо (хоча і не обов'язково ) об'єктно-орієнтованою мовою.


1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.- Це (майже) визначення схеми дизайну - гнучкої / легко використовуваної конструкції коду, яка використовується для подолання обмежень у самій мові, яка легко передається іншим. Після того, як це частина мови, це вже не шаблон дизайну.
Ізката

1
@Izkata: Отже, ваша позиція полягає в тому, що, скажімо, шаблон спостерігача неможливий у C #, оскільки C # має шаблон мовлення спостерігача, вбудований у мову у формі подій? Це нерозумно. Специфічний для мови біт, відповідний шаблону, є канонічним способом реалізації шаблону в мові. Звичайно, шаблони дизайну можуть використовуватися мовами, які безпосередньо їх підтримують; у цьому вся суть їх прямої підтримки!
Ерік Ліпперт

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

@Izkata: Я тоді заплутався. Ви сказали, що коли шаблон є частиною мови, він більше не є шаблоном. Тож чи "шаблон спостерігача" - це шаблон на Java, але не шаблон у C #?
Ерік Ліпперт

1
Або кажучи інакше, модель дизайну - це все, що робить програміст, ніж можна описати англійською. Я не впевнений, що я цілком згоден з цим визначенням, але я думаю, що воно точно відображає те, що ви говорите, і, принаймні, не має переваги від суб'єктивного судження, що вважається зразком. Це властивість аналізу того, що роблять програмісти, і, звичайно, програміст не може діяти так, що його неможливо проаналізувати :-)
Стів Джессоп,

4

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

Це сказало, що я не маю! @ # $ Ing уявлення про те, в чому полягає вага легкої ваги, і мені не соромно це визнати. (дивіться коментарі до іншої статті у Вікіпедії, яка дуже допомогла)

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

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

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


2
мухомор (не маховик). Прочитайте перший абзац (і лише перший абзац) статті у Вікіпедії, а потім подивіться на Integer.valueOf (int) і подумайте, скільки разів це дозволяє уникнути створення нових цілих чисел для загальних значень.

2
@MichaelT І чорт. Це написало це пекло набагато краще, ніж все, що я бачив. Спасибі.
Erik Reppen

Проблема, яку я бачу в більшості інструкцій щодо дизайну, полягає в тому, що вони намагаються надати велике уявлення про проект (книга GoF - це все про те, щоб написати текстовий процесор - не мале завдання). Але іноді вони застосовні до набагато менших (майже «тривіальних») речей. 7 рядків коду можуть чітко описати флігель у тому, чим всі користуються постійно. Набагато простіше зрозуміти, ніж великі проекти чи надумані приклади.

1
@MichaelT Для мене це також хороший приклад того, як отримати трохи ясності щодо чогось корисного для написання коду взагалі, навіть якщо ця ідея не має негайного використання на моїй основній мові - JavaScript, де для вирішення цього питання зазвичай використовуються прототипні успадкування та закриття. проблема. Маючи цей a-ha момент, я все-таки дав мені деякі ідеї, які є актуальними.
Erik Reppen

2

Основна проблема, з якою ви зіткнетеся, полягає в тому, що ви будете винаходити колесо . Їх називають візерунками, оскільки вони з’являються часто і передбачувано.


0

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


-1

Ви весь час використовуєте шаблони дизайну, не усвідомлюючи цього. Багато стандартних бібліотек популярними мовами розроблені з урахуванням дизайнерських зразків. Прикладом може бути FileReaderбібліотека Java, створена за схемою дизайну декоратора . Тепер, кажучи про власний код, ви не змушені використовувати шаблони дизайну (у більшості випадків). Шаблон дизайну - це "багаторазове рішення часто зустрічається проблеми" , це означає, що він допоможе вам написати більш чистий код для отримання більш чистих кодів, тому від вас залежить, наскільки ви хочете уникнути закінчення коду спагетті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.