Яка різниця між моделями дизайну та архітектурними візерунками?


119

Коли ми читаємо про моделі дизайну в Інтернеті, зазначимо, що існує 3 категорії:

  • Творчі
  • Структурний
  • Поведінкові

Але коли ми створюємо архітектуру програмного забезпечення, то думаємо про MVP, MVC або MVVM.

Наприклад, серед креативних моделей я знайшов однотонний візерунок , але я також використовував синглтон у своєму MPV.

Отже, моє запитання: Чи є модель дизайну над усією структурою виробу?

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

  • Якщо ні, то де MVP, MVC та MVVM в трьох категоріях моделей? І чим відрізняється дизайн та архітектура програмного забезпечення?


Вже обговорювалося: stackoverflow.com/a/46419722/3649347
Розкажи, як

2
Перегляньте цей перелік ресурсів дизайну та архітектурних моделей github.com/DovAmir/awesome-design-patterns
dov.amir

Відповіді:


174

Це вимагає детального пояснення, але я спробую змалювати відмінності, наскільки мені відомо.

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

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

Візерунок може виникати на дуже різних рівнях. Дивіться фрактали . Швидке сортування, сортування об'єднань - це всі алгоритмічні шаблони для організації групи елементів у порядку.

Для найбільш спрощеного перегляду:

  • Парадигми програмування - специфічні для мови програмування
  • Шаблони проектування - вирішує повторювані проблеми в побудові програмного забезпечення
  • Архітектурні зразки - фундаментальна структурна організація програмних систем

Ідіоми - це парадигматичні та мовні специфічні методи програмування, які заповнюють деталі низького рівня.

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

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

Як виходять візерунки? Через:

  1. повторне використання,
  2. класифікація
  3. і нарешті абстракція, щоб перешкодити спільність.

Якщо ви дотримувались думок, викладених вище. Ви побачите, що Сінглтон - це «модель дизайну», тоді як MVC - це одна з «архітектурних» схем для вирішення проблем.

Спробуйте прочитати далі:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
Дуже добре зроблено і продумано. Тепер я лише хотів, щоб усі вживали терміни так само диференційовано, як ви їх вказуєте тут. Чи можу я приклеїти відбиток вашої відповіді біля стіни над кавовим дозатором нашого відділу маркетингу. Можливо, вони зрозуміють одного дня. ;-)
ofi

@ofi: Дякую! Використання мовної конструкції може як нас вводити в оману, так і вводити нас. Це те, що я вважаю досить потужним.
pyfunc


Гарна відповідь, дякую !! як сказав @ofi, я надрукую його та закріплюю в стіні команди дизайнерів.
рулон

11

Шаблони дизайну - це добре відомі зразки для вирішення технічних проблем способом, який зарекомендував себе багато разів. Шаблони дизайну - це загальні дизайнерські структури та практики, які створюють багаторазове об'єктно-орієнтоване програмне забезпечення. Прикладами шаблону дизайну є «Factory Pattern», «Singleton», «Facade», «State» і т.д.

Шаблони архітектури добре відомі для вирішення проблем архітектури програмного забезпечення. Архітектура програмного забезпечення - це процес визначення структурованого рішення, яке відповідає всім технічним та експлуатаційним вимогам. Архітектура програми - це загальна «організація» коду. Прикладами різних архітектур можуть бути MVC, MVVM, MVP, n-шар (тобто UI-BLL-DAL) і т.д.


1

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

Для отримання додаткової інформації: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Ну, для основної частини це питання мови. Згідно з моїм досвідом, межа між дизайном та архітектурою, що стосується програмного забезпечення, - це широка річка з її шириною, що виникає внаслідок рівня води, на що, в свою чергу, впливають сезони маркетингу. Взагалі термін "дизайн" використовується із сильним аспектом поведінки програмного продукту, як його визнають кінцеві користувачі, тоді як "архітектура" означає технічну структуру програмного забезпечення, тобто компоненти, бібліотеки, протоколи та все, що потрібно для виконання дизайн. "Шаблони дизайну" виконують дві ролі: 1-я - вони розглядаються як найкраща практика для вирішення категорії (більш-менш) стандартних задач, а не продиуктів; По-друге, вони допомагають розробникам спілкуватися. Залишаючись своїм прикладом Сінглтона, це дозволяє нам знати, про що йдеться у механіці, просто використовуючи слово, замість того, щоб пояснювати кожен раз, що ми створили єдиний екземпляр, використовуючи призначений простір даних (змінний або будь-який інший), який задається контрольованим чином і гарантовано є єдиний, тому що ми захистили конструктор класу тощо. Отже, IMHO коротка відповідь на ваше запитання: Це залежить від того, хто говорить. Це має певний сенс?


0

Шаблони дизайну відрізняються від архітектурних патерн за своїм обсягом, вони більш локалізовані, вони менше впливають на базу коду, вони впливають на певний розділ бази коду, наприклад:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Архітектурні патерни мають великий вплив на кодову базу, найчастіше впливають на всю програму або горизонтально (тобто, як структурувати код всередині шару), або вертикально (тобто як запит обробляється із зовнішніх шарів у внутрішні шари та назад). Приклади архітектурних моделей: Model-View-Controller, Model-View-ViewModel

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