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

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

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

Как много терминологии в разработке программного обеспечения, эти термины не ясны, и разные люди придают им разное значение. MSDN утверждает, что архитектурные стили и архитектурные шаблоны - это одно и то же, но лично я предпочитаю думать об этом в строках того, что объясняется Джорджем Фэрбенксом и Майклом Килингом, что сказано в этих ответах на переполнение стека и как Википедия разделяет эти два понятия: ключевое различие - масштаб.

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

Архитектурные стили

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

  • На основе компонентов
  • Монолитное приложение
  • Слоистый
  • Трубы и фильтры
  • Событийный
  • Опубликовать-подписаться
  • Плагины
  • Клиент-сервер
  • Сервис-ориентированный

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

Архитектурные узоры

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

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

  • Трехуровневый
  • Микроядро
  • Модель-Представление-Контроллер
  • Модель-представление-ViewModel

Шаблоны проектирования

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

  • Как создать экземпляр объекта, когда мы знаем только, какой тип нужно создать во время выполнения (может быть, Factory Class?);
  • Как заставить объект вести себя по-разному в зависимости от его состояния (может быть, конечный автомат или шаблон стратегии?).

Вывод

Как я уже упоминал в начале этого сообщения, все зависит от объема:

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

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

Источники

2004 - Microsoft - Понимание сервис-ориентированной архитектуры

2009 - Microsoft - Руководство по архитектуре приложений Microsoft.

2010 - Stack Overflow - В чем разница между Arch. Узоры и арка. Стили?

2014 - Джордж Фэрбенкс - Архитектурные паттерны против архитектурных стилей

2017 - Википедия - Список стилей и паттернов архитектуры программного обеспечения

Опубликовано 28 июля 2017 г. 2 августа 2017 г.

Первоначально опубликовано на сайте herbertograca.com 28 июля 2017 г.