- •А.А. Волосевич
- •3. Шаблоны и архитектура программ
- •3.1. Модульное тестирование
- •3.2. Шаблоны проектирования
- •3.3. Структурные шаблоны: Декоратор, Заместитель, мост Декоратор (Decorator)
- •Заместитель (Proxy)
- •Мост (Bridge)
- •3.4. Структурные шаблоны: компоновщик и приспособленец Компоновщик (Composite)
- •Приспособленец (Flyweight)
- •3.5. Структурные шаблоны: адаптер и фасад Адаптер (Adapter)
- •Фасад (Façade)
- •3.6. Порождающие шаблоны: прототип, фабричный метод, одиночка Прототип (Prototype)
- •Фабричный метод (Factory method)
- •Одиночка (Singleton)
- •3.7. Порождающие шаблоны: абстрактная фабрика и строитель Абстрактная фабрика (Abstract factory)
- •Строитель (Builder)
- •3.8. Шаблоны поведения: стратегия, состояние, шаблонный метод Стратегия (Strategy)
- •Состояние (State)
- •Шаблонный метод (Template method)
- •3.9. Шаблоны поведения: цепочка обязанностей и команда Цепочка обязанностей (Chain of responsibility)
- •Команда (Command)
- •3.10. Шаблоны поведения: итератор, посредник, наблюдатель Итератор (Iterator)
- •Посредник (Mediator)
- •Наблюдатель (Observer)
- •3.11. Шаблоны поведения: посетитель, интерпретатор, хранитель Посетитель (Visitor)
- •Интерпретатор (Interpreter)
- •Хранитель (Memento)
- •3.12. Некоторые неклассические шаблоны проектирования
- •Неизменный объект (Immutable object)
- •Пул объектов (Object pool)
- •Отложенная инициализация (Lazy initialization)
- •Нулевой объект (Null object)
- •3.13. Антипаттерны
- •3.14. Архитектура прогРаммного Обеспечения
- •«Клиент-сервер»
- •Архитектура, основанная на использовании компонентов
- •Многоуровневая архитектура
- •Шина сообщений
- •Выделенное представление
- •Объектно-ориентированная архитектура
- •Архитектура, ориентированная на сервисы
«Клиент-сервер»
Архитектурный стиль «клиент-сервер» (client/server) описывает отношение между двумя компьютерными программами, в котором одна программа – клиент – выполняет запросы к другой программе – серверу. Этот стиль решает, в основном, задачу развёртывания приложения. На модели «клиент-сервер» созданы приложения для работы с базами данных, электронной почтой и для доступа к веб-ресурсам.
Принципы данного архитектурного стиля:
Клиент инициирует один или несколько запросов, ожидает ответа на них и затем обрабатывает ответы.
В определенный момент времени клиент подключен к одному серверу для обработки запросов (реже – к небольшой группе серверов).
Клиент работает с пользователем напрямую, обычно используя графический интерфейс.
Сервер не инициирует запросов.
Обычно для выполнения запросов клиенты проходят аутентификацию на сервере.
Главными преимуществами стиля «клиент-сервер» являются:
Высокая безопасность. Все данные хранятся на сервере, обеспечивающем больший уровень безопасность, нежели отдельный клиент.
Централизованный доступ к данным. Так как данные хранятся только на сервере, ими легко управлять (например, обеспечить обновление).
Легкость сопровождения. Роль сервера могут выполнять несколько физических компьютеров, объединенных в сеть. Благодаря этому клиент не замечает сбоев или замены отдельного серверного компьютера.
Отметим некоторые вариации стиля «клиент-сервер». В системах клиент-очередь-клиент сервер исполняет роль очереди для данных клиентов. То есть, клиенты использую сервер для обмена данными между собой. Пиринговые приложения (peer-to-peer) – это вариант системы «клиент-очередь-клиент», в котором любой клиент может играть роль сервера. Сервера приложений служат для размещения и выполнения программ, которыми управляет клиент.
Архитектура, основанная на использовании компонентов
Ключевым понятием данного архитектурного стиля является компонент. Это программный объект, который спроектированный так, чтобы удовлетворять следующим принципам:
Компонент допускает повторное использование в различных системах.
Компонент не хранит информации, специфичной для конкретного ПО, в котором он используется.
Допускается создание новых компонент на основе существующих.
Компонент имеет известный интерфейс для взаимодействия, но скрывает детали своей внутренней реализации.
Компоненты проектируются так, чтобы иметь минимальные зависимости от других компонентов.
Типичным примером компонент являются компоненты пользовательского интерфейса (элементы управления).
Компонентный стиль в архитектуре ПО сосредоточен на выделении отдельных компонент и организации взаимодействия между ними. Этот стиль решает задачи структурирования приложений и обеспечивает следующие преимущества:
Легкость развертывания. Когда для компонента доступна новая версия, старая версия заменяется без влияния на остальные компоненты.
Уменьшение стоимости. При разработке можно применять готовые компоненты сторонних производителей.
Повторное использование. Одни и те же компоненты могут использоваться в нескольких приложениях.
Уменьшение технической сложности. Обычно компоненты, составляющие одно приложение, развернуты в рамках одного программного контейнера. Этот контейнер управляет временем жизни компонентов, активацией компонентов, передачей сообщений между компонентами и так далее.