Lecture07 (1133564), страница 3
Текст из файла (страница 3)
Агентывзаимодействуют друг с другом только черезчетко определенную часть интерфейсауправляющих компонентов.Системы наоснове хранилищаданныхРепозиторий(repository)Основная модельбизнес-приложений:клиентскиеприложения,воспринимающиезапросы пользователейи сервера,выполняющие этизапросы.Наиболее частоиспользуется припостроенииприложений с GUI.Document-View в MFC(Microsoft FoundationClasses) — документ вэтой схеме объединяетроли данных иобработчика.Основные функции системы связаны схранением, обработкой и представлениембольших количеств данных.Порядок работы определяется только потокомвнешних событий.Выделяется общее хранилище данных —репозиторий.
Каждый обработчик запускается вответ на соответствующее ему событие и как-топреобразует часть данных в репозитории.Среды разработки иCASE-системыКлассная доска(blackboard)Системы распознаванияСпособ решения задачи в целом неизвестен илитекстаслишком трудоемок, но известны методы,частично решающие задачу, композиция которыхспособна выдавать приемлемые результаты,возможно добавление новых потребителейданных или обработчиков.Отдельные обработчики запускаются, только еслиданные репозитория для их работы подготовлены.Подготовленность данных определяется спомощью некоторой системы шаблонов. Еслиможно запустить несколько обработчиков,используется система их приоритетов.Таблица 7.
Некоторые архитектурные стили.Многие из представленных стилей носят достаточно общий характер и часто встречаются вразных системах. Кроме того, часто можно обнаружить, что в одной системе используютсянесколько архитектурных стилей — в одной части преобладает один, в другой — другой, или жеодин стиль используется для выделения крупных подсистем, а другой — для организации болеемелких компонентов в подсистемах.Более подробного рассмотрения заслуживают стили «Каналы и фильтры», «Многоуровневаясистема». Далее следуют их описания согласно [7].Каналы и фильтрыНазвание.
Каналы и фильтры (pipes and filters).Назначение. Организация обработки потоков данных в том случае, когда процессобработки распадается на несколько шагов. Эти шаги могут выполняться отдельнымиобработчиками, возможно, реализуемыми разными разработчиками или дажеорганизациями. При этом нужно принимать во внимание следующие факторы.Действующие силы.• Должны быть возможны изменения в системе за счет добавления новых способовобработки и перекомбинации имеющихся обработчиков, иногда самими конечнымипользователями.• Небольшие шаги обработки проще переиспользовать в различных задачах.• Не являющиеся соседними обработчики не имеют общих данных.• Имеются различные источники входных данных — сетевые соединения, текстовыефайлы, сообщения аппаратных датчиков, базы данных.• Выходные данные могут быть востребованы в различных представлениях.• Явное хранение промежуточных результатов может быть неэффективным, создастмножество временных файлов, может привести к ошибкам, если в его организациюсможет вмешаться пользователь.• Возможно использование параллелизма для более эффективной обработки данных.Решение.
Каждая отдельная задача по обработке данных разбивается на несколько мелкихшагов. Выходные данные одного шага являются входными для других. Каждый шагреализуется специальным компонентом — фильтром (filter). Фильтр потребляет и выдаетданные инкрементально, небольшими порциями. Передача данных между фильтрамиосуществляется по каналам (pipes).Структура. Основными ролями компонентов в рамках данного стиля являются фильтр иканал. Иногда выделяют специальные виды фильтров — источник данных (data source) ипотребитель данных (data sink), которые, соответственно, только выдают данные илитолько их потребляют. Каждый поток обработки данных состоит из чередующихсяфильтров и каналов, начинается источником данных и заканчивается их потребителем.Фильтр получает на свой вход данные и обрабатывает их, дополняя их результатамиобработки, удаляя какие-то части и трансформируя их в некоторое другое представление.Иногда фильтр сам требует входные данные и выдает выходные по их получении, иногдаон, наоборот, может реагировать на события прихода данных на вход и требования данныхна выходе.
Фильтр обычно потребляет и выдает данные некоторыми порциями.Канал обеспечивает передачу данных, их буферизацию и синхронизацию обработки ихсоседними фильтрами (например, если оба соседних фильтра активны, работают впараллельных процессах). Если никакой дополнительный буферизации и синхронизации нетребуется, канал может представлять собой простую передачу данных в виде параметраили результата вызова операции.Рисунок 45.
Пример структуры классов для образца каналы и фильтры.На Рис. 45 показан пример диаграммы классов для данного образца, в котором 3 каналареализованы неявно — через вызовы операций и возвращение результатов, а один — явно.Из участвующих в этом примере фильтров источник и потребитель данных, а также Filter 1запрашивают входные данные, Filter 3 сам передает их дальше, а Filter 2 и запрашивает, ипередает данные самостоятельно.Filter 1Filter 2send dataFilter 3process datasend dataРисунок 46. Сценарий работы проталкивающего фильтра.Filter 1Filter 2Filter 3get dataget dataprocess dataРисунок 47. Сценарий работы вытягивающего фильтра.Динамика.
Возможны три различных сценария работы одного фильтра — проталкиваниеданных (push model, фильтр сам передает данные следующему компоненту, а получает ихтолько в результате передачи предыдущего), вытягивание данных (pull model, фильтртребует данные у предыдущего компонента, следующий сам должен затребовать данные унего) и смешанный вариант. Часто реализуется только один вид передачи данных для всехфильтров в рамках системы. Кроме того, канал может буферизовать данные исинхронизовать взаимодействующие с ним фильтры. Сценарии работы системы в целомстроятся в виде различных комбинаций вариантов работы отдельных фильтров.Filter 1Pipeprocess dataFilter 2read datawrite dataprocess datawrite dataprocess dataread dataРисунок 48.
Сценарий работы буферизующего и синхронизующего канала.Реализация. Основные шаги реализации следующие.• Определить шаги обработки данных, необходимые для решения задач системы.Очередной шаг должен зависеть только от выходных данных предшествующегошага.• Определить форматы данных при их передаче по каждому каналу.• Определить способ реализации каждого канала, проталкивание или вытягиваниеданных, необходимость дополнительной буферизации и синхронизации.• Спроектировать и реализовать необходимый набор фильтров. Реализовать каналы,если для их представления нужны отдельные компоненты.• Спроектировать и реализовать обработку ошибок. Обработку ошибок приприменении этого стиля достаточно тяжело организовать, поэтому ею частопренебрегают.
Однако, требуется, как минимум, адекватная диагностикаслучающихся на разных этапах ошибок.Могут быть выделены специальные каналы для передачи сообщений об ошибках.При возникновении ошибок ввода соответствующий фильтр может игнорироватьдальнейшие входные данные до получения определенного разделителя,гарантирующего, что после него идут данные, не связанные с предыдущими.• Сконфигурировать необходимый конвейер обработки данных, собрав вместенужные фильтры и соединяющие их каналы.Следствия применения образца.Достоинства.• Промежуточные данные могут не храниться в файлах, но могут и храниться, еслиэто необходимо для каких-то дополнительных целей.• Фильтры можно легко заменять, переиспользовать, менять местами, переставлять икомбинировать, реализуя множество функций на основе одних и тех жекомпонентов.• Конвейерные системы обработки данных могут быть разработаны очень быстро,если имеется богатый набор фильтров.• Активные фильтры могут работать параллельно, давая в результате болееэффективное решение на многопроцессорных системах.Недостатки.• Управление обработкой с помощью большого общего состояния, которое иногданеобходимо, не может быть эффективно реализовано с помощью этого стиля.• Часто параллельная обработка не приносит никакого повышенияпроизводительности, поскольку передача данных между фильтрами может бытьдостаточно дорогой, фильтры могут требовать всех входных данных, прежде чемвыдадут хоть что-то, и их синхронизация с помощью каналов может приводить кзначительным простоям.• Часто фильтры большее время тратят на преобразование формата поступающихвходных данных, чем на их обработку.