Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow АРХИТЕКТУРА ИНФОРМАЦИОННЫХ СИСТЕМ
Посмотреть оригинал

Паттерны и фреймворки в архитектуре ИС

Паттерны

При проектировании информационных систем зачастую применяются типовые решения, которые называют также шаблонами проектирования.

Шаблон проектирования (паттерн, design pattern) - это архитектурная конструкция, предоставляющая эффективное решение проблемы проектирования в рамках конкретного контекста и предполагающая многократное применение.

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

Алгоритмы также являются шаблонами, но не проектирования, а вычислений.

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

Могут быть выделены следующие разновидности паттернов: архитектурные, системные, структурные, поведенческие, производящие и параллельного программирования [9].

Архитектурные паттерны (architectural patterns) определяют состав и функции отдельных подсистем, а также их взаимодействие. Эти паттерны могут быть отнесены к паттернам высокого уровня, которые не зависят ни от платформы, ни от языка программирования. Такие паттерны называют также архитектурными стилями, которые были рассмотрены выше.

Системные паттерны (system patterns) описывают системный (верхний) уровень приложения. Их использование может обеспечить построение более эффективных систем. Основные виды системных паттернов и их назначение рассмотрены в табл. 7.1.

Основные виды системных паттернов

Таблица 7.1

Паттерн

Назначение

Модель-Вид- Контроллер (Model- View-Controller (MVC))

Разделение приложения или подсистемы на три функциональные части (модель данных, представление (пользовательский интерфейс) и контроллер (управляющую логику)). Поскольку указанные части относительно независимы, облегчается разработка, модификация и настройка каждой части по отдельности. MVC содержится во многих фреймворках для вебпрограммирования. Примерами удачного применения этого паттерна для языка РНР являются Zend Framework и cakePHP

Сессия (Session), Рабочая нить (Worker Thread)

В системах распределённой обработки обеспечивает возможность серверам различать клиентов, что позволяет повысить эффективность многопоточных приложений

Паттерн

Назначение

Обратный вызов (Callback)

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

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

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

Постоянное обновление (Successive Update)

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

Структурные паттерны (structural patterns) определяют способы разделения и объединения элементов приложения. Разновидности структурных паттернов и их назначение приведены в табл.7.2.

Основные виды структурных паттернов

Таблица 7.2.

Паттерн

Назначение

Адаптер

(Adapter)

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

Паттерн

Назначение

«Мост»

(Bridge)

Разделение компонента на две взаимосвязанные, но независимые структуры: абстракцию и реализацию, каждая из которых является иерархической. Это позволяет повысить гибкость компонента за счёт возможности отдельного изменения (наследования) абстракции и реализации. "Полиморфизм" в классическом виде позволяет подменять наследника, но родитель у него один и тот же. Мост обеспечивает возможность "наследникам" менять "родителя", т.е. делает родителя полиморфным, позволяя менять родителя для наследников во время исполнения.

Компоновщик

(Composite)

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

«Декоратор»

(Decorator)

Предоставление средства изменения функциональности компонентов без изменения их внешнего представления или функций

«Фасад» (Facade)

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

«Приспособленец» (Flyweight)

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

Полуобъект и протокол (Half-Object Plus Protocol (НОРР))

Разделение объекта, который должен быть доступен в более чем одном адресном пространстве, например, на клиента и на сервере, на два взаимозависимых полуобъекта (по одному в каждом адресном пространстве), взаимодействующим!) посредством собственного протокола. В каждом пространстве реализуется требуемая именно в нём функциональность. Протокол координирует активность и передаёт необходимую информацию между по- луобъектами. Используется, например, в CORBA, RMI

Прокси

(Proxy)

Предоставление объекта для обеспечения контроля доступа, безопасности, либо повышения скорости доступа к другому объекту

Поведенческие паттерны (behavioural patterns) представляют собой совокупность эвристических способов организации управления в системе. Основные разновидности поведенческих паттернов и их назначение приведены в табл. 7.3.

Основные виды поведенческих паттернов

Таблица 7.3

Паттерн

Назначение

Цепочка ответственности (Chain of Responsibility)

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

Команда (Command)

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

Интерпретатор

(Interpreter)

Определяет грамматику некоторого языка и интерпретирует языковые предложения для решения некоторой задачи

Итератор (Iterator)

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

Моментальный «снимок» или хранитель (Memento)

Получасг и сохраняет внутреннее состояние объекта, что позволяет, при необходимости, восстановить объект в том же состоянии. Соблюдается инкапсуляция, т.е. сохранённое состояние недоступно для других объектов. Можст быть использован для реализации операций типа "Отмена"

Медиатор или

посредник

(Mediator)

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

Состояние

(State)

Обеспечивает возможность для объекта изменять своё поведение при изменении его внутреннего состояния. Улучшает гибкость изменения поведения по сравнению с использованием для описания переходов структур данных

Метод шаблона (Template Method)

Позволяет "замещать" методы базового класса методами производных классов. Широко используется в каркасах приложений

Порождающие паттерны (creational patterns) служат для создания объектов в системе (табл. 7.4) [4J. В процессе функционирования объектно-ориентированных систем, создается достаточно много экземпляров объектов. Порождающие паттерны упрощают процесс создания объектов, обеспечивая разработчику ряд возможностей:

  • • унифицированный способ создания экземпляров объектов, не требующий указания определенных типов классов в программе;
  • • лёгкость создания объектов: для создания экземпляра объекта не требуется разрабатывать большой объём сложного программного кода;

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

Основные виды порождающих паттернов

Таблица 7.4

Паггерн

Назначение

«Абстрактная фабрика» (Abstract Factory)

Предоставляет возможность создания групп взаимосвязанных объектов без необходимости указания конкретных классов объектов. Система становится независимой от типов создаваемых объектов

«Строитель»

(Builder)

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

«Фабричный метод» (Factory Method)

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

«Прототип»

(Prototype)

Упрощает создание объектов на основе прототипов (уже существующих в системе объектов), поддерживающих клонирование, т.е. способных создавать собственные дубликаты. Объекг может быть создан путём клонирования соответствующего прототипа

«Одиночка»

(Singleton)

Позволяет создать в системе лишь один экземпляр объекта некоторого класса, предоставляя доступ к нему остальным классам

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

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

Основные типы паттернов параллельного программирования и их назначение показаны в табл. 7.5.

Основные типы паттернов параллельного программирования и их назначение

Таблица 7.5

Паттерн

Назначение

Однопоточное выполнение (Single Threaded Execution)

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

Охраняемая приостановка (Guarded Suspension)

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

Объект блокировки (Lock Object)

Используется в ситуации, когда необходимо координировать доступ к нескольким различным ресурсам

Отмена (Balking)

Используется в ситуации, когда операция либо должна быть выполнена немедленно, либо не выполнена вообще

Планировщик

(диспетчер)

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

Паттерн

Назначение

(Scheduler)

Блокировка чте- ния/записи (Read/Write Lock)

Используется в ситуации, когда одни операции могут совместно использовать некоторый ресурс одновременно, а другие - не могут

Производитель-

потребитель

(Producer

/consumer)

Обеспечивает возможность координировать объекты, которые создают некоторый ресурс, и объекты, которые используют данный ресурс

Двухфазное завершение (Two- Phase Termination)

Обеспечивает правильное последовательное закрытие потоков

Двойная буферизация (Double Buffering)

Специальная версия паттерна «Производитель-потребитель», которая позволяет создавать необходимый ресурс заранее

Асинхронная

обработка

(Asynchronous

Processing)

Устраняет необходимость ожидания результата операции, если этот результат нс требуется немедленно

Будущее (Future)

Позволяет классам, которые вызывают операцию, не иметь информации о характере операции - является она синхронной или асинхронной

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

 
Посмотреть оригинал
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы