Различие дизайна и архитектурного паттерна в программной инженерии.

Это крутая кривая обучения. Если вы не знакомы с шаблонами проектирования или архитектурой (в разработке программного обеспечения), прежде чем читать эту статью, я предлагаю вам заранее поискать некоторые базовые ссылки в Интернете, такие как Википедия.

TL DR;

Шаблон проектирования - это термин, относящийся к общим решениям, которые используются для решения общих проблем, возникающих в определенных контекстах. Имеет отношение к (дальнейшим небольшим) компонентам подсистемы, их взаимоотношениям и взаимодействию друг с другом. Например, это поможет вам решить проблему, возникающую при создании алгоритма. И вы просто применяете шаблон проектирования, который подходит только для вашей проблемы.

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

Путаница

Многие программисты в наши дни все еще не понимают разницы между шаблонами проектирования и шаблонами архитектуры или даже не знают об этом много. Как и несколько часов назад, прежде чем я решил написать этот пост, мой друг обсуждает со мной знаменитый MVC (Model View Controller), который, по его мнению, является шаблоном проектирования. Я попытался объяснить ему как можно яснее и порекомендовать ему ссылку на какой-нибудь сайт, который объясняет, что MVC больше похожа на архитектурный образец. Затем он ответил мне ссылкой из GeeksforGeeks, в которой говорится, что MVC - это шаблон проектирования.

В первом абзаце статьи GeeksforGeeks говорится, что

Шаблон проектирования Контроллер представления модели (MVC) указывает, что приложение состоит из модели данных, информации представления и информации управления. Шаблон требует, чтобы каждый из них был разделен на разные объекты.

Но во втором абзаце

MVC - это скорее архитектурный шаблон, но не для полного приложения. MVC в основном относится к пользовательскому интерфейсу или уровню взаимодействия приложения. Вам по-прежнему понадобится уровень бизнес-логики, возможно, уровень служб и уровень доступа к данным.

Позже я спросил своего друга:
«знаете ли вы, чем они отличаются, в дизайне и архитектуре?»,
«конечно нет, пожалуйста, объясните мне »

Вот дерьмо, мы снова…

Образец дизайна

Позвольте мне начать с определения. Шаблоны проектирования - это типичные решения часто возникающих проблем при разработке программного обеспечения, или, другими словами, они помогают вам решить проблему, с которой вы иногда сталкиваетесь, когда занимаетесь программированием. Они похожи на готовые чертежи, которые вы можете настроить для решения повторяющейся проблемы дизайна в вашем коде.

Шаблоны проектирования - это квинтэссенция общности, которую вы можете найти в программах. Это позволяет нам разбирать большие сложные конструкции и строить их из простых частей. Предоставляет общее решение для класса проблем - pyfunc.

Такой шаблон похож на ваш рецепт приготовления, чтобы вы знали, как приготовить еду. Но на самом деле вкусы людей различаются, поэтому, чтобы использовать рецепт, вы должны быть адаптированы к потребностям ингредиентов и ситуации.

Созданные шаблоны сформулированы таким образом, чтобы найти лучший способ решения проблемы, но, тем не менее, программист должен применять шаблоны с подходом, который соответствует контексту возникающей проблемы, адаптируясь к потребностям.

Есть 3 классификации паттернов проектирования.

  1. Шаблоны создания
    , обеспечивающие механизмы создания объектов, повышающие гибкость и многократное использование существующего кода. Типы: Абстрактная фабрика, Строитель, Фабричный метод, Пул объектов, Прототип, Синглтон.
  2. Структурные шаблоны
    для объяснения того, как собирать объекты и классы в более крупные структуры, сохраняя при этом гибкость и эффективность структур. Типы: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Private Class Data, Proxy.
  3. Поведенческие шаблоны
    для эффективного общения и распределения обязанностей между объектами. Типы: Цепочка ответственности, Команда, Интерпретатор, Итератор, Посредник, Мементо, Нулевой объект, Наблюдатель, Состояние, Стратегия, Шаблонный метод, Посетитель.

В настоящее время существует 26 шаблонов проектирования.
«Вот дерьмо, это слишком много для таких сложных вещей ...»

Ага. это правда. Но суть в том, что вам не нужно знать все эти дерьмовые вещи. Этот шаблон дизайна применяется только в зависимости от вашего варианта использования.

«Хорошо, я понял теорию. Но почему эти сложные шаблоны проектирования вообще существовали? Какой во всем этом смысл ?. И мне нужно этому учиться? »

Правда в том, что вам, возможно, удастся проработать программистом много лет, не зная ни о каком шаблоне проектирования. Многие люди так и поступают. Однако даже в этом случае вы можете реализовать некоторые шаблоны, даже не подозревая об этом. Так зачем вам тратить время на их изучение?

  • Шаблоны проектирования - это набор испытанных и проверенных решений распространенных проблем в разработке программного обеспечения. Даже если вы никогда не сталкиваетесь с этими проблемами, знание шаблонов все равно полезно, потому что оно учит вас, как решать всевозможные проблемы, используя принципы объектно-ориентированного проектирования.
  • Шаблоны проектирования определяют общий язык, который вы и ваши товарищи по команде можете использовать для более эффективного общения. Вы можете сказать: «О, просто используйте для этого синглтон»., и все поймут идею, лежащую в основе вашего предложения. Не нужно объяснять, что такое синглтон, если вы знаете шаблон и его имя.

Паттерны проектирования говорят о том, как писать код эффективно, с легкостью в обслуживании, с высокой степенью повторного использования и, конечно, с удобочитаемостью благодаря абстракции - vrluckyin

«Понятно ... но не могли бы вы привести мне пример?»
Я дам вам базовый пример с одним из моих любимых узоров.

Образец наблюдателя

Наблюдатель - это один из шаблонов проектирования в поведенческой классификации. Для упрощения этот шаблон состоит из двух основных компонентов: наблюдателя и наблюдаемого. Наблюдатель - это объект, который наблюдает за наблюдаемым, в то время как наблюдаемый отвечает за отправку информации (уведомление) наблюдателя.

Действие, которое наблюдатель выполняет для подключения к наблюдаемому, называется подпиской. И только наблюдаемый может отправлять информацию наблюдателю, который уже подписан на него.

Это тип отношений один-ко-многим. Почему? потому что у одного наблюдаемого может быть много наблюдателей, и он может отправлять им информацию (уведомлять).

Шаблон наблюдателя - идеальное решение, если вам нужен алгоритм или сервис, который может получать данные в реальном времени или прослушивать изменение данных с вашего сервера. Возьмем пример приложения «Погода», которое должно отслеживать погоду в Джакарте, Индонезия.

Вам понадобится WeatherObservable, чтобы получать данные с сервера в некоторые временные интервалы и уведомлять о них WeatherObserver, который уже подписан.

Обсуждение дешево, покажи мне код

Взгляните на пример ниже, я написал его на языке Котлин.

Прежде всего, мы объявляем интерфейс для наблюдаемого и наблюдателя. BaseObservable реализован с двумя функциями: подписаться для подписания наблюдателя и update для широковещательной рассылки изменений данных наблюдателю. В то время как BaseObserver имеет только 1 функцию notify для получения данных (уведомления) от наблюдаемого.

Затем мы создаем наблюдаемый объект, который реализует интерфейс BaseObservable. Мы также объявляем список массивов для сохранения уже подписавшегося наблюдателя.

Наконец, мы объявляем наблюдателя.

Этот код готов, а когда функция:

WeatherObservable.refresh()

вызывается где-то в коде, наш наблюдаемый будет транслировать изменение данных с сервера всем наблюдателям, которые уже подписались. Все просто, правда?

Хватит дизайна, приступим к архитектуре.

Образец архитектуры

Шаблон архитектуры похож на абстрактное объяснение того, как вы структурируете свое приложение. Согласно Википедии,

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

Это шаблоны для общего макета вашего приложения или приложений. У всех есть достоинства и недостатки.

Существует множество архитектурных паттернов, список можно посмотреть в Википедии. Но я упомяну 10 распространенных архитектур:

  1. Многослойный узор
  2. Шаблон клиент-сервер
  3. Шаблон "главный-подчиненный"
  4. Шаблон "труба-фильтр"
  5. Образец брокера
  6. Шаблон одноранговой сети
  7. Схема шины событий
  8. Шаблон модель-представление-контроллер
  9. Шаблон на доске
  10. Шаблон переводчика

Эти шаблоны уже подробно описаны здесь:



Дизайн против архитектуры

В целом (отключите своего внутреннего программиста на некоторое время) и архитектура, и дизайн объясняют «идею», но архитектура фокусируется на абстрактном представлении. идеи, в то время как Дизайн фокусируется на реализации идеи. Дизайн намного более детализирован, чем архитектура.

Архитектура представляет собой абстрактный вид всей системы, в то время как Дизайн представляет реализацию некоторой конкретной рассматриваемой области.

Предположим, правительство хочет построить новый город. Во-первых, они создадут абстрактную диаграмму высокого уровня, объясняющую, где будет жилой район, там будут производственные площади, где должны быть расположены парки, где разместить сетевые системы, больницы, школы, рынки и так далее. Это Архитектура. Теперь после этого они будут создавать схемы, объясняющие, как строятся дома, какую максимальную площадь может иметь один дом. Как строить дома бок о бок. Насколько шире будет школьный фасад. Сколько коек и палат будет в больнице и т. Д. Это Дизайн.

Теперь вернемся к программированию. Архитектура объясняет компоненты и их взаимодействие, а дизайн объясняет, как каждый компонент построен или будет построен. Итак, есть шаблоны архитектуры и шаблоны проектирования, и они оба разные.

Я надеюсь, отсюда вы сможете увидеть разницу между дизайнерскими и архитектурными паттернами.

использованная литература

Особая благодарность Пандитью, тому, кто рассказал мне об основах этого материала, и Дэвану за обсуждение узора.

Вы хотите, чтобы я объяснил каждый отдельный шаблон дизайна или более подробно объяснил эту тему в следующем посте? пожалуйста, оставьте комментарий ниже :)

Любая критика или предложение приветствуются.