В чем разница между шаблонами проектирования и архитектурными шаблонами?


119

Когда мы читаем о шаблонах проектирования в Интернете, мы отмечаем, что есть 3 категории:

  • Творения
  • структурная
  • поведенческий

Но когда мы создаем архитектуру программного обеспечения, мы думаем о MVP, MVC или MVVM.

Например, среди шаблонов создания я нашел шаблон синглтона , но я также использовал синглтон в своем MPV.

Итак, мой вопрос: является ли шаблон проектирования всей структурой продукта?

  • Если да, то как синглтон может быть шаблоном проектирования? Потому что я могу использовать его где угодно в моем приложении. По сути, можно создавать в памяти только один экземпляр за раз, но разве эта концепция не определяет, как разрабатывается программное обеспечение?

  • Если нет, то где MVP, MVC и MVVM в трех категориях шаблонов? А в чем разница между дизайном и архитектурой ПО?



2
Ознакомьтесь с этим списком ресурсов по
шаблонам

Ответы:


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: Спасибо! Использование языковой конструкции может ввести нас в заблуждение и направить. Это то, что я считаю очень мощным.
pyfunc

+3 за то, что
спасли

Хороший ответ, спасибо !! как сказал @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

Ну по большей части дело в языке. По моему опыту, граница между дизайном и архитектурой в том, что касается программного обеспечения, - это широкая река, ширина которой обусловлена ​​уровнем воды, который, в свою очередь, в основном зависит от сезонов маркетинга. Обычно термин «дизайн» используется с сильным аспектом поведения программного продукта, признанным конечными пользователями, тогда как «архитектура» означает техническую структуру программного обеспечения, то есть компоненты, библиотеки, протоколы и все, что необходимо для выполнения дизайн. «Шаблоны проектирования» играют две роли: во-первых, они рассматриваются как лучшие практики для решения категории (более или менее) стандартных проблем, а не продуктов; Во-вторых, они помогают разработчикам общаться. Оставаясь с вашим примером синглтона, он позволяет нам узнать, в чем суть механики, просто используя слово вместо того, чтобы каждый раз объяснять, что мы создали единственный экземпляр, используя назначенное пространство данных (переменную или что-то еще), которое устанавливается контролируемым образом и гарантированно единственный, потому что мы защитили конструктор класса и т. д. Итак, ИМХО, краткий ответ на ваш вопрос: это зависит от того, кто говорит. В этом есть смысл?


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?)

Архитектурные шаблоны оказывают сильное влияние на базу кода, чаще всего влияя на все приложение либо по горизонтали (т.е. как структурировать код внутри слоя), либо по вертикали (т.е. как запрос обрабатывается из внешних слоев во внутренние уровни и назад). Примеры архитектурных паттернов: модель-представление-контроллер, модель-представление-ViewModel

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.