2.3Архитектура Пандоры
Примечание: стрелки показывают ссылки одних объектов на другие (и, соответственно, какие объекты к каким могут обращаться).
Ядро
Графический интерфейс Пандоры
Визуальный
модуль
Вкладка созданная визуальным модулем
Обычный
модуль
2.3.1Архитектура ядра
Рабочее пространство
Адаптер Пандоры
Проекты
Менеджер модулей
Активные модули
Сборки
Интерфейс адаптера Пандоры
Настройки модулей
Модуль
Проект
Информация о наборах данных
Адаптер лога
2.3.2Архитектура графического интерфейса
Адаптер Пандоры
Главная форма
Адаптер рабочего пространства
Обозреватель рабочего пространства
Форма редактирования набора модулей
Обозреватель записей лога
2.3.3Описание классов
2.3.3.1Адаптер Пандоры
Через Адаптер Пандоры осуществляется связь классов ядра, модулей и графического интерфейса. Адаптер Пандоры является глобальным классом (в этом классе имеется статическая ссылка на свой экземпляр), так что к нему может получить доступ любой класс ядра и графического интерфейса. Сборки, содержащие модули, не имеют ссылок на сборку ядра (Pandora.Core), поэтому они не могут обращаться к нему напрямую. Модули обращаются к адаптеру модулей через интерфейс, ссылку на который им передает менеджер модулей. Интерфейс адаптера Пандоры содержит только те методы, которые необходимы модулям (он не содержит дополнительные методы, используемые графическим интерфейсом Пандоры).
2.3.3.2Рабочее пространство
Рабочее пространство хранит в себе набор проектов, менеджер модулей и ссылки на справки для текущего набора модулей. В наборе проектов указан активный проект.
2.3.3.3Проект
Проект хранит в себе информацию о наборах данных. Каждый набор данных ссылается на определенный интерфейс хранения данных и хранит в себе список информации о данных (DataInfo). Информация о данных содержит в себе имя и адрес данных, а также информацию о зависимостях этих данных от других. Адрес данных – это сериализуемый объект, однозначно определяющий, откуда модуль хранения должен считывать и куда записывать эти данные. В частности адресом данных может быть путь к файлу или строка подключения к СУБД. Как интерпретировать адрес знает только модуль хранения.
Для обеспечения целостности данных, в проекте также хранятся полные ссылки на все модули хранения. При добавлении старого проекта к рабочему пространству эти ссылки сравниваются со ссылками на активные модули хранения и, если они не равны, происходит конвертация всех наборов данных соответствующего модуля.
2.3.3.4Менеджер модулей
Менеджер модулей хранит в себе список всех сборок, из которых можно загрузить модули, список активных модулей и настройки всех модулей. Каждый модуль описывается полным именем своего типа и относительным путем к dll, в которой лежит реализация этого модуля.
2.3.3.5Адаптер лога
Данный класс предоставляет методы для добавления записей о событиях в таблицу с данными. И позволяет получить эту таблицу графическому интерфейсу для ее отображения (модули обращаются к адаптеру лога через интерфейс, который не позволяет им обращаться к таблице напрямую).
2.3.3.6Главная форма
Главная форма предоставляет интерфейс для работы с рабочим пространством. Также она отображает в себе обозреватель рабочего пространства, обозреватель записей лога, вкладки визуальных модулей, а также кнопки и элементы меню с командами модулей. Кроме динамически формируемых кнопок и элементов меню, в форме есть статические элементы меню и кнопки.
2.3.3.7Адаптер рабочего пространства
Данный класс является оберткой для взаимодействия главной формы с рабочим пространством. Он сообщает главной форме об изменении состоянии рабочего пространства и активного проекта (для включения/отключения некоторых пунктов меню).
2.3.3.8Обозреватель рабочего пространства
Данная форма отображает все проекты рабочего пространства, позволяет добавлять, удалять и менять активный проект. Также для каждого проекта она отображает наборы данных, позволяет добавлять, удалять и менять активные данные.
2.3.3.9Форма редактирования набора модулей
Данная форма позволяет загружать модули из библиотеки, удалять модули и менять активный модуль для каждого интерфейса.
2.3.3.10Обозреватель записей лога
Данная форма отображает таблицу с записями лога.
|