Design » History » Version 9
Никита Давыдовский, 03/02/2012 12:15 PM
| 1 | 1 | Алексей Филиппов | h1. Проект архитектуры |
|---|---|---|---|
| 2 | |||
| 3 | Модель архитектуры представлена на следующей схеме: |
||
| 4 | |||
| 5 | !https://redmine.cs.karelia.ru/attachments/download/83/850px-MS_Arch_mods.png! |
||
| 6 | |||
| 7 | h2. Описание уровней архитектуры |
||
| 8 | |||
| 9 | *Сетевой уровень (Network layer)* объединяет используемые социальные сервисы и среду передачи данных. В архитектуре представлены сервисы ВКонтакте, Facebook и Flickr. Каждый сервис предоставляет доступ к данным посредством собственного протокола. В настоящий момент в проекте MySocials реализована поддержка протоколов на основе XML и JSON. |
||
| 10 | |||
| 11 | *Транспортный уровень (Transport layer)* представляет собой набор библиотек доступа к социальным сервисам (драйверов). Основная задача драйвера - выполнять запросы к сервису для получения или отправки данных. Один запрос к драйверу может быть реализован в виде серии запросов к сервису. |
||
| 12 | |||
| 13 | *Промежуточный уровень (Middleware layer)* обеспечивает единый программный интерфейс (MySocials API) доступа к социальным сервисам. API реализован на основе XML. Для более удобной реализации приложений с использованием социальных сервисов реализована Qt библиотека (Core). Библиотека предоставляет набор базовых классов, средства кэширования для автономной работы и объединяет составные запросы. |
||
| 14 | |||
| 15 | *Пользовательский уровень (User layer*) объединяет разработанные приложения и плагины. |
||
| 16 | * Плагины для Qt Messaging Framework (QMF plugins) предоставляют доступ к социальным сервисам аналогично доступу к почтовым сервисам. |
||
| 17 | * Плагины приложений (Application plugins) реализуют работу с социальными сервисами в различных приложениях. В настоящий момент реализован плагин для Telepathy framework и плагин импорта контактов в адресную книгу Maemo. |
||
| 18 | * Консольное тестовое приложение (Console application) позволяет проверить работоспособность драйверов и выполнять запросы на основе MySocials API. |
||
| 19 | * Приложение для просмотра изображений социальных сервисов (Gallery) |
||
| 20 | * Приложение для работы с социальными сервисами (MySocials) |
||
| 21 | |||
| 22 | h2. Описание подсистем |
||
| 23 | |||
| 24 | *Ядро (Core)* – Подпрограмма, отвечающая за перенаправление запросов от других модулей к драйверам и наоборот, контроль использования оперативной памяти программой, выполнение повторяющихся задач(проверка сообщений, проверка друзей и т.д.) |
||
| 25 | Включает в себя: |
||
| 26 | |||
| 27 | * Менеджер Событий - модуль, выполняющий через определенный промежуток времени повторяющиеся задача (проверка на новые сообщения и т.д.) |
||
| 28 | * Модуль перенаправления запросов - модуль, который перенаправляет запросы, полученные от подпрограмм к драйверам |
||
| 29 | |||
| 30 | *Драйвер (Driver)* - подпрограмма реализующая взаимодействие с определенным сервисом или их группой |
||
| 31 | Включает в себя: |
||
| 32 | |||
| 33 | * Модуль получения запросов от ядра |
||
| 34 | * Отправка запросов и получение ответов от сервиса |
||
| 35 | * Обработка ответа от сервиса |
||
| 36 | * Модуль отправки ответа ядру |
||
| 37 | |||
| 38 | *Интерфейс пользователя (UI)* - Подпрограмма содержащая графический интерфейс пользователя. Содержит функции по выводу информации пользователю, вызывает функции из виджетов. Включает в себя: |
||
| 39 | Включает в себя: |
||
| 40 | |||
| 41 | * Формы с компонентами из виджетов |
||
| 42 | |||
| 43 | *Виджеты (Widgets)* - Набор компнентов, содержащих логику работу интерфейса. Виджеты располагаются на уровне конечного приложения. Включают в себя: |
||
| 44 | |||
| 45 | * модули(менеджеры) для соединения графического интерфейса и ядра |
||
| 46 | * модели данных полученные от ядра и методы доступа к ним |
||
| 47 | * функции обработки событий, поступающих от графического интерфейса |
||
| 48 | 2 | Алексей Филиппов | |
| 49 | h1. Ядро |
||
| 50 | |||
| 51 | !https://redmine.cs.karelia.ru/attachments/download/84/850px-MSCore_Arch.png! |
||
| 52 | Архитектура ядра |
||
| 53 | |||
| 54 | *Структуры данных* |
||
| 55 | |||
| 56 | В проекте MySocials для хранения данных используются специальные классы-хранилища. Каждому объекту социальной сети соответствует свой класс. Все классы должны наследоваться от базового класса (Base object), содержащего общие для всех объектов поля и методы. |
||
| 57 | |||
| 58 | Поля класса @baseobject@: |
||
| 59 | |||
| 60 | <pre> |
||
| 61 | QString serviceId; // Id сервиса. |
||
| 62 | QString accountId; // Id аккаунта. |
||
| 63 | QString ownerId; // Id владельца объекта. |
||
| 64 | QString objectId; // Id объекта. |
||
| 65 | QString icon_url; // Путь до иконки объекта. |
||
| 66 | bool isPrivate; // True если объект имеет ограниченный доступ и не может быть загружен с сервиса. |
||
| 67 | bool isEmpty; // True если в объекте ничего нет, иначе - false. |
||
| 68 | </pre> |
||
| 69 | |||
| 70 | Методы класса @baseobject@: |
||
| 71 | |||
| 72 | <pre> |
||
| 73 | /* Генерирует имя файла на основе пути и ссылки на объект. */ |
||
| 74 | const QString generateFileName(const QString &path, const QString &obj) const; |
||
| 75 | </pre> |
||
| 76 | |||
| 77 | Поля класса @event@: |
||
| 78 | |||
| 79 | <pre> |
||
| 80 | QString title; // Название события. |
||
| 81 | QString description; // Описание события. |
||
| 82 | QString startTime; // Время начала события. |
||
| 83 | QString endTime; // Время завершения события. |
||
| 84 | QString updateTime; // Время последнего обновления информации о событии. |
||
| 85 | QString location; // Географическое место расположения. |
||
| 86 | QString privacy; // Приватность. |
||
| 87 | QString creator; // Идентификатор пользователя создавшего событие. |
||
| 88 | QString icon; // URL иконки события. |
||
| 89 | QString rsvpStatus; // Статус участия. |
||
| 90 | </pre> |
||
| 91 | |||
| 92 | Методы класса @event@: |
||
| 93 | |||
| 94 | <pre> |
||
| 95 | /* "Упаковать" данные в XML формат. */ |
||
| 96 | QDomElement toQDomElement(QDomDocument& doc) const; |
||
| 97 | </pre> |
||
| 98 | |||
| 99 | <pre> |
||
| 100 | /* Переопределение предыдущего метода. Во входных параметрах добавлен источник данных. */ |
||
| 101 | static QDomElement toQDomElement(QDomDocument& doc, const Event& src); |
||
| 102 | </pre> |
||
| 103 | |||
| 104 | <pre> |
||
| 105 | /* Загрузить данные из XML. */ |
||
| 106 | static Event fromQDomElement(const QDomElement& fr, const QString& srvcId, const QString& accountId, |
||
| 107 | const QString& friendId); |
||
| 108 | </pre> |
||
| 109 | |||
| 110 | h1. Функции ядра |
||
| 111 | |||
| 112 | h2. Получение списка событий |
||
| 113 | |||
| 114 | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что сообщения получены. |
||
| 115 | |||
| 116 | *Параметры:* |
||
| 117 | |||
| 118 | @userId@ - id пользователя чей список нужно получить. |
||
| 119 | @startTime@ - дата, начиная с которой нужно получить события (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 120 | @alsoLoadIcons@ - также загрузить иконки. |
||
| 121 | |||
| 122 | *Прототип:* |
||
| 123 | |||
| 124 | <pre> |
||
| 125 | void getEvents(QString userId, QString startTime, bool alsoLoadIcons) |
||
| 126 | </pre> |
||
| 127 | |||
| 128 | h2. Создание события |
||
| 129 | |||
| 130 | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекается eventId (id созданного события) и функция возвращает его. |
||
| 131 | |||
| 132 | *Параметры:* |
||
| 133 | |||
| 134 | @title@ - название события. |
||
| 135 | @description@ - описание события. |
||
| 136 | @startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 137 | @endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 138 | @location@ - место проведения. |
||
| 139 | @privacy@ - приватность. |
||
| 140 | |||
| 141 | *Прототип:* |
||
| 142 | |||
| 143 | <pre> |
||
| 144 | QString createEvent(QString title, QString description, QString startTime, QString endTime, QString location, |
||
| 145 | QString privacy) |
||
| 146 | </pre> |
||
| 147 | |||
| 148 | h2. Редактирование события |
||
| 149 | |||
| 150 | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе редактирования (true/false) и эта информация возвращается из функции. |
||
| 151 | |||
| 152 | *Параметры:* |
||
| 153 | |||
| 154 | @eventId@ - id события которое требуется редактировать. |
||
| 155 | @title@ - название события. |
||
| 156 | @description@ - описание события. |
||
| 157 | @startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 158 | @endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 159 | @location@ - место проведения. |
||
| 160 | @privacy@ - приватность. |
||
| 161 | |||
| 162 | *Прототип:* |
||
| 163 | |||
| 164 | <pre> |
||
| 165 | bool editEvent(QString eventId, QString title, QString description, QString startTime, QString endTime, |
||
| 166 | QString location, QString privacy) |
||
| 167 | </pre> |
||
| 168 | |||
| 169 | h2. Удаление события |
||
| 170 | |||
| 171 | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе удаления (true/false) и эта информация возвращается из функции. Также функция удаляет информацию о событии из кэша. |
||
| 172 | |||
| 173 | *Параметры:* |
||
| 174 | |||
| 175 | @eventId@ - id события которое требуется удалить. |
||
| 176 | |||
| 177 | *Прототип:* |
||
| 178 | |||
| 179 | <pre> |
||
| 180 | bool deleteEvent(QString eventId) |
||
| 181 | </pre> |
||
| 182 | |||
| 183 | h1. Драйвер |
||
| 184 | |||
| 185 | !https://redmine.cs.karelia.ru/attachments/download/85/850px-MSDriver_Arch.png! |
||
| 186 | Архитектура драйвера |