В. А. Камаев, В. В. Костерин, М. О. Прыгунков

advertisement
71
В. А. Камаев, В. В. Костерин, М. О. Прыгунков
ПРИНЦИПЫ УСТРОЙСТВА КОНТЕЙНЕРОВ ДЛЯ ПОСТРОЕНИЯ
ГИБКИХ ПРОГРАММНЫХ СИСТЕМ
Волгоградский государственный технический университет
Гибкость программного обеспечения можно достичь применением особых объектов – контейнеров. В данной статье под термином "контейнер" понимается некая сущность, которая может хранить
в себе другие сущности (и не просто хранить, но и заставлять их работать). Конечно же, идеальный
случай, когда в контейнер можно положить что угодно и это "что угодно" будет работать так, как хочется разработчикам.
Для того чтобы приблизиться к реальности, введем два вида контейнеров: динамический и статический. Контейнер, как и любая сущность, взаимодействует с окружающим миром, то есть у него
есть входы и выходы. Так как наш контейнер – это информационная сущность, то, как и входящий,
так и исходящий потоки являются информационными. Итак, можно сделать первый вывод: у контейнера есть как минимум два интерфейса, с помощью которых он обрабатывает входящий и исходящий
информационные потоки.
Но если есть интерфейсы, с помощью которых обрабатываются внешние потоки, то должны быть
интерфейсы, обрабатывающие внутренние, вернее, распределяющие поступившую информацию среди объектов, содержащихся в этом контейнере. Градация на статические и динамические контейнеры
осуществляется именно по тому, как контейнер распределяет информацию внутри себя.
Если контейнер для "общения" с вложенными объектами общается через единый интерфейс, то
такой контейнер будем называть статическим. Следовательно, объекты, вложенные в контейнер,
должны обладать таким качеством, как абсолютно одинаковые интерфейсы работы с внешними потоками. Скорее всего, такие объекты будут обладать одинаковой структурой. Из сказанного ранее
следует, что если контейнер работает со всеми вложенными объектами не по одной схеме, а используя разные методы, то такой контейнер будем называть динамическим.
При реализации контейнера разработчик обязательно столкнется со следующими проблемами:
1) как хранить внутри контейнера объекты (которыми, кстати, могут быть другие контейнеры);
2) как передавать информацию внутри контейнера между его объектами;
3) как сделать процесс создания контейнеров наименее трудоемким.
При создании контейнера необходимо решить ряд задач:
1) сохранения состояния контейнера;
2) передачи и обработки сообщений;
3) работы с объектами;
4) изменения функциональности во время работы программы.
Сохранять состояние контейнера необходимо по следующим причинам:
1) восстановление после сбоя;
2) распределение загрузки между элементами компьютерной сети;
3) использование контейнера за пределами системы.
Выполнить поставленные задачи можно несколькими способами.
Рассмотрим пути решения проблемы сохранения состояния контейнера.
Сохранение состояния контейнера в бинарном файле. Внутреннее состояние контейнера можно
записывать прямым потоком в бинарный файл на жесткий диск каждого клиентского места. Этот
способ далеко не новый и используется многими программными средствами, например, входящими в
состав Microsoft Office, для хранения промежуточных данных.
Достоинства:
1) простота реализации процедуры сохранения информации о состоянии;
2) простота реализации процедуры извлечения информации о состоянии из хранилища.
Недостатки:
1) необходимость написания процедур сохранения и извлечения информации о состоянии;
2) необходимость файлов-хранилищ на локальном компьютере;
3) малая скорость операций записи и считывания информации с жесткого диска по сравнению со
скоростью работы с оперативной памятью;
4) невозможность восстановления файлов-хранилищ после сбоя.
Сохранение состояния контейнера в XML-файле. Использование файлов в формате XML стало в последнее время довольно популярным. Одни разработчики используют этот формат для передачи данных
из одной системы в другую, другие – для хранения информации, используя методы работы с БД.
Достоинства:
1) XML – стандарт, который поддерживается большинством современных программ;
2) написано множество функций, которые позволяют записывать и извлекать из XML-файла данные;
3) объекты, упакованные в XML-формате, удобно передавать между узлами сети.
72
Недостатки:
1) низкая скорость чтения и записи файла на жесткий диск;
2) сложность централизованного управления массивом сохраненных объектов.
Сохранение состояния контейнера в реляционной СУБД. Использование СУБД в качестве хранилища данных довольно распространено. В основном в базе данных хранят не оперативную информацию, а уже конечные данные. Но можно хранить и промежуточную информацию.
Достоинства:
1) более высокая скорость сохранения/извлечения информации, по сравнению с хранением в файлах;
2) централизованное управление хранимой информацией;
3) возможность интеграции с другими программными системами на уровне СУБД.
Недостатки:
1) загрузка сервера БД;
2) загрузка сети;
3) необходимость писать конвертер объектов в реляционные таблицы;
4) расход ресурсов на конвертирование объектов в реляционные таблицы и обратно.
Сохранение состояния контейнера в объектно-ориентированной СУБД. С развитием объектноориентированным программированием производители СУБД стали переносить акцент хранения с реляционных таблиц на объекты. Сначала появились встроенные в систему и оптимизированные конвертеры, а уже в настоящее время вышли первые версии полноценных ОО СУБД.
Достоинства:
1) высокая скорость работы;
2) малая загрузка клиентских мест;
3) централизованное хранение данных;
4) не нужно писать конвертер объектов в реляционные таблицы и наоборот;
5) возможность интеграции на уровне БД.
Недостатки:
1) загрузка сервера СУБД;
2) загрузка сети;
3) невозможность работы клиентских мест вне сети.
Далее рассмотрим возможные решения проблемы по реализации механизма передачи и обработки
сообщений.
Передача сообщений через адрес в оперативной памяти. На заре программирования, когда использовались, в основном, языки низкого уровня, передача информации между различными программами происходила через регистры или адреса в оперативной памяти.
Достоинства:
1) высокая скорость работы;
2) доступность для всех процессов на локальном компьютере;
3) доступность по сети.
Недостатки:
1) необходимость делать защиту от "затирания" сообщения другими процессами;
2) необходимость работать на низком уровне, близком к аппаратному;
3) сложность доступа по сети;
4) проблема синхронизации доступа.
Передача сообщений через временный файл. Этот способ используется довольно часто. Выделяется специальный файл, в который записываются сообщения.
Достоинства:
1) защита от уничтожения сообщения другими процессами;
2) простота в использовании.
Недостатки:
1) при работе в сети, необходимость открытия доступа к файлу;
2) низкая скорость работы;
3) ненадежность хранения.
Передача сообщений через специально выделенный порт. При использовании этого метода необходимо дать монопольный доступ к порту только нужным программным системам. Использование
одного и того же порта различными, не связанными друг с другом системами, может привести к порче информации и сбоям в работе.
Достоинства:
1) поддержка сетевой работы;
2) высокая скорость работы;
Существование алгоритмов и реализованных функций работы с портами.
73
Недостатки:
1) необходимость обеспечить монопольный доступ к порту;
2) жесткая привязанность к одному определенному порту;
3) отсутствие сохранения истории сообщений.
Передача сообщений с помощью СУБД. В качестве инструмента для передач сообщений можно
использовать СУБД, сохраняя сообщения в специально отведенной таблице или таблицах.
Достоинства:
1) доступ по сети;
2) централизация хранения и управления информацией;
3) перенос нагрузки с клиентских мест на сервер.
Недостатки:
1) низкая скорость работы;
2) загрузка сети;
3) загрузка сервера СУБД.
Передача сообщений при помощи MSQM. MSQM является продуктом компании Microsoft и служит для обработки очередей сообщений.
Достоинства:
1) доступен всем пользователям MS Windows;
2) нет необходимости разрабатывать менеджер сообщений;
3) возможность организации полнофункциональной работы Offline;
4) возможность интерактивного взаимодействия приложений за счет существенно более высокой
скорости и меньших накладных расходов при передаче сообщений.
Недостатки:
1) необходимость переходить на новую объектную модель;
2) усложнение настройки конечного продукта.
Передача сообщений при помощи QC.
Достоинство: проще использовать в разработках, чем MSQM.
Недостатки:
1) отсутствие исходных кодов;
2) усложнение настройки конечного продукта.
Передача сообщений при помощи менеджера-резидента. Имеется в виду специальная программа,
которая постоянно запущена на компьютере и всегда готова обрабатывать запросы.
Достоинства:
1) высокая скорость работы;
2) постоянная готовность обрабатывать запросы.
Недостатки:
1) необходимость писать менеджер;
2) постоянная работа резидента не позволяет освободить ресурсы, выделенные для него.
Далее рассмотрим пути решения проблемы по созданию инструментария добавления объектов в
контейнеры. Рассмотрим лишь статические контейнеры, поскольку добавление объекта в динамический контейнер – задача тривиальная.
Передача упакованных в XML-формат объектов. В современных библиотеках классов существуют инструменты для упаковки/распаковки объектов в XML-файлы.
Передача ссылки на объект. Главная трудность этого метода состоит в необходимости постоянно
поддерживать объекты в том состоянии, чтобы к ним можно было обратиться по ссылке.
Наконец, рассмотрим пути решения проблемы изменения функциональности во время работы
системы. Изменять функциональность системы именно во время работы программы особенно важно
для больших программных систем, потому что остановка такой системы может повлечь за собой сбои
в общей работе, а также вынудит большое число пользователей остановить свою работу.
Замена ссылки на DLL, где содержится функция. Это удобно, когда библиотека DLL не велика.
Но при большом количестве файлов такая манипуляция может быть затруднительна.
Изменение ссылок в виртуальной таблице методов. Более удобный метод, по сравнению с предыдущим. Он позволяет документировать изменения, вести версионность системы в автоматическом
режиме.
В статье было введено понятие "контейнера", рассмотрены виды и структуры контейнеров. Также
рассмотрены варианты реализации контейнера.
Download