Архитектурный шаблон — это общее, повторно используемое решение часто встречающейся проблемы в архитектуре программного обеспечения в заданном контексте. [1] Архитектурные шаблоны решают различные проблемы в программной инженерии , такие как ограничения производительности компьютерного оборудования , высокая доступность и минимизация бизнес-рисков . Некоторые архитектурные шаблоны были реализованы в программных фреймворках . Существует две основные категории архитектурных шаблонов: монолитные и распределенные . [2]
Использование слова «шаблон» в индустрии программного обеспечения было обусловлено схожими концепциями, выраженными в традиционной архитектуре , такими как работа Кристофера Александра « Язык шаблонов» (1977), в которой данная практика рассматривалась с точки зрения создания лексикона шаблонов , что побудило специалистов в области компьютерной науки задуматься о собственном лексиконе дизайна.
Использование этой метафоры в профессии программной инженерии стало обычным явлением после публикации книги « Шаблоны проектирования » (1994) Эриха Гаммы , Ричарда Хелма , Ральфа Джонсона и Джона Влиссидеса , ныне широко известных как «Банда четырех», что совпало с ранними годами существования общедоступного Интернета , ознаменовав начало «пожирания мира» сложными программными системами [3] и соответствующую потребность в кодификации быстро разрастающегося мира разработки программного обеспечения на максимально возможном уровне, при этом оставаясь гибкими и адаптивными.
Архитектурные шаблоны похожи на шаблоны проектирования программного обеспечения , но имеют более широкую область применения.
Хотя архитектурный шаблон передает образ системы, он не является архитектурой. Архитектурный шаблон — это концепция, которая решает и очерчивает некоторые существенные связные элементы архитектуры программного обеспечения. Бесчисленное множество различных архитектур могут реализовывать один и тот же шаблон и разделять связанные характеристики. Шаблоны часто определяются как «строго описанные и общедоступные». [4] [5]
Следуя традиционной архитектуре зданий, программный архитектурный стиль представляет собой особый метод строительства, характеризующийся особенностями, которые делают его заметным.
Архитектурный стиль определяет: семейство систем с точки зрения модели структурной организации; словарь компонентов и соединителей с ограничениями на то, как они могут быть объединены. [6]
Архитектурный стиль — это именованный набор архитектурных проектных решений, которые (1) применимы в данном контексте разработки, (2) ограничивают архитектурные проектные решения, характерные для конкретной системы в этом контексте, и (3) выявляют полезные качества в каждой полученной системе. [1]
Некоторые рассматривают архитектурные шаблоны и архитектурные стили как одно и то же, [7] некоторые рассматривают стили как специализации шаблонов. Общее у них то, что и шаблоны, и стили являются идиомами для использования архитекторами, они «предоставляют общий язык» [7] или «словарь» [6], с помощью которого можно описывать классы систем.
Главное отличие состоит в том, что шаблон можно рассматривать как решение проблемы, в то время как стиль является более общим и для своего появления не требует решения проблемы.
Программное обеспечение управляется его проблемным пространством, в котором могут применяться решения. Таблица ниже показывает, как программное обеспечение рассматривается в различных проблемных пространствах, определяемых поддоменами и решаемых с помощью соответствующих шаблонов проектирования программного обеспечения и шаблонов решений . Поддомены могут быть включены в анализ других поддоменов, например, решение проблемы искусственного интеллекта сначала рассматривается как проблема архитектуры данных.
Некоторые примеры архитектурных моделей:
Кроме того, шаблоны часто определяются как что-то "строго описанное и общедоступное". Например, многоуровневая архитектура является стилем вызова и возврата, когда она определяет общий стиль для взаимодействия.
Несмотря на то, что архитектурный шаблон передает образ системы, он не является архитектурой как таковой. Архитектурный шаблон — это скорее концепция, которая решает и очерчивает некоторые существенные связные элементы архитектуры программного обеспечения. Бесчисленное множество различных архитектур могут реализовывать один и тот же шаблон и, таким образом, иметь общие характеристики. Более того, шаблоны часто определяются как что-то "строго описанное и общедоступное".