Design » History » Revision 20
« Previous |
Revision 20/25
(diff)
| Next »
Никита Давыдовский, 04/26/2012 02:43 PM
Проект архитектуры¶
- Table of contents
- Проект архитектуры
- Ядро
- Функции
Модель архитектуры представлена на следующей схеме:
Описание уровней архитектуры¶
Сетевой уровень (Network layer) объединяет используемые социальные сервисы и среду передачи данных. В архитектуре представлены сервисы ВКонтакте, Facebook и Flickr. Каждый сервис предоставляет доступ к данным посредством собственного протокола. В настоящий момент в проекте MySocials реализована поддержка протоколов на основе XML и JSON.
Транспортный уровень (Transport layer) представляет собой набор библиотек доступа к социальным сервисам (драйверов). Основная задача драйвера - выполнять запросы к сервису для получения или отправки данных. Один запрос к драйверу может быть реализован в виде серии запросов к сервису.
Промежуточный уровень (Middleware layer) обеспечивает единый программный интерфейс (MySocials API) доступа к социальным сервисам. API реализован на основе XML. Для более удобной реализации приложений с использованием социальных сервисов реализована Qt библиотека (Core). Библиотека предоставляет набор базовых классов, средства кэширования для автономной работы и объединяет составные запросы.
Пользовательский уровень (User layer) объединяет разработанные приложения и плагины.- Плагины для Qt Messaging Framework (QMF plugins) предоставляют доступ к социальным сервисам аналогично доступу к почтовым сервисам.
- Плагины приложений (Application plugins) реализуют работу с социальными сервисами в различных приложениях. В настоящий момент реализован плагин для Telepathy framework и плагин импорта контактов в адресную книгу Maemo.
- Консольное тестовое приложение (Console application) позволяет проверить работоспособность драйверов и выполнять запросы на основе MySocials API.
- Приложение для просмотра изображений социальных сервисов (Gallery)
- Приложение для работы с социальными сервисами (MySocials)
Описание подсистем¶
Ядро (Core) – Подпрограмма, отвечающая за перенаправление запросов от других модулей к драйверам и наоборот, контроль использования оперативной памяти программой, выполнение повторяющихся задач(проверка сообщений, проверка друзей и т.д.)
Включает в себя:
- Менеджер Событий - модуль, выполняющий через определенный промежуток времени повторяющиеся задача (проверка на новые сообщения и т.д.)
- Модуль перенаправления запросов - модуль, который перенаправляет запросы, полученные от подпрограмм к драйверам
Драйвер (Driver) - подпрограмма реализующая взаимодействие с определенным сервисом или их группой
Включает в себя:
- Модуль получения запросов от ядра
- Отправка запросов и получение ответов от сервиса
- Обработка ответа от сервиса
- Модуль отправки ответа ядру
Интерфейс пользователя (UI) - Подпрограмма содержащая графический интерфейс пользователя. Содержит функции по выводу информации пользователю, вызывает функции из виджетов. Включает в себя:
Включает в себя:
- Формы с компонентами из виджетов
Виджеты (Widgets) - Набор компнентов, содержащих логику работу интерфейса. Виджеты располагаются на уровне конечного приложения. Включают в себя:
- модули(менеджеры) для соединения графического интерфейса и ядра
- модели данных полученные от ядра и методы доступа к ним
- функции обработки событий, поступающих от графического интерфейса
Ядро¶
Архитектура ядра
Структуры данных
В проекте MySocials для хранения данных используются специальные классы-хранилища. Каждому объекту социальной сети соответствует свой класс. Все классы должны наследоваться от базового класса (Base object), содержащего общие для всех объектов поля и методы.
Поля класса baseobject
:
QString serviceId; // Id сервиса. QString accountId; // Id аккаунта. QString ownerId; // Id владельца объекта. QString objectId; // Id объекта. QString icon_url; // Путь до иконки объекта. bool isPrivate; // True если объект имеет ограниченный доступ и не может быть загружен с сервиса. bool isEmpty; // True если в объекте ничего нет, иначе - false.
Методы класса baseobject
:
/* Генерирует имя файла на основе пути и ссылки на объект. */ const QString generateFileName(const QString &path, const QString &obj) const;
Поля класса event
:
QString title; // Название события. QString description; // Описание события. QString startTime; // Время начала события. QString endTime; // Время завершения события. QString updateTime; // Время последнего обновления информации о событии. QString location; // Географическое место расположения. QString privacy; // Приватность. QString creator; // Идентификатор пользователя создавшего событие. QString icon; // URL иконки события. QString rsvpStatus; // Статус участия.
Методы класса event
:
/* "Упаковать" данные в XML формат. */ QDomElement toQDomElement(QDomDocument& doc) const;
/* Переопределение предыдущего метода. Во входных параметрах добавлен источник данных. */ static QDomElement toQDomElement(QDomDocument& doc, const Event& src);
/* Загрузить данные из XML. */ static Event fromQDomElement(const QDomElement& fr, const QString& srvcId, const QString& accountId, const QString& friendId);
Функции¶
Получение списка событий¶
Описание: Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что события получены.
Параметры:
userId
- id пользователя чей список нужно получить.startTime
- дата, начиная с которой нужно получить события (строка даты в формате UNIX_timestamp или ISO_8601).alsoLoadIcons
- также загрузить иконки.
Прототип:
void getEvents(QString userId, QString startTime, bool alsoLoadIcons)
Создание события¶
Описание: Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекается eventId (id созданного события) и функция посылает сигнал с eventId и статусом транзакции.
Параметры:
title
- название события.description
- описание события.startTime
- время начала (строка даты в формате UNIX_timestamp или ISO_8601).endTime
- время завершения (строка даты в формате UNIX_timestamp или ISO_8601).location
- место проведения.privacy
- приватность.
Прототип:
QString createEvent(QString title, QString description, QString startTime, QString endTime, QString location, QString privacy)
Редактирование события¶
Описание: Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе редактирования (true/false) и эта информация возвращается из функции.
Параметры:
eventId
- id события которое требуется редактировать.title
- название события.description
- описание события.startTime
- время начала (строка даты в формате UNIX_timestamp или ISO_8601).endTime
- время завершения (строка даты в формате UNIX_timestamp или ISO_8601).location
- место проведения.privacy
- приватность.
Прототип:
bool editEvent(QString eventId, QString title, QString description, QString startTime, QString endTime, QString location, QString privacy)
Удаление события¶
Описание: Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе удаления (true/false) и эта информация возвращается из функции. Также функция удаляет информацию о событии из кэша.
Параметры:
eventId
- id события которое требуется удалить.
Прототип:
bool deleteEvent(QString eventId)
Поиск событий¶
Описание: Функция, на основе поисковой строки, даты и смещения, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что события найдены получены.
Параметры:
text
- поисковый запрос.onlyUpcoming
- флаг, поиск только по грядущим событиям.offset
- смещение (используется для подгрузки событий).
Прототип:
void searchEvents(QString text, bool onlyUpcoming, int offset);
Установка/изменение статуса участия¶
Описание: Функция устанавливает/меняет статус участия пользователя на параметр status, по отношению к событию eventId.
По завершению транзакции отправляет сигнал об успехе/ошибке.
Параметры:
eventId
- id события по отшению к которому нужно изменить статус.status
- новый статус участия (attending/maybe(unsure)/declined).
Прототип:
void setRsvpStatus(QString eventId, QString status);
Получение списка отметок¶
Описание: Функция получает список отметок места (заданного в параметрах одним из способов).
Параметры:
latitude
- географическая широта места для которого нужно получить список отметок.longitude
- географическая долгота места для которого нужно получить список отметок.placeId
- идентификатор места (игнорируется если поля широты и долготы не пустые).ownerId
- идентификатор пользователя для котрого нужно получить список (игнорируется если поля широты, долготы и placeId не пустые).
Прототип:
void getCheckins(QString latitude, QString longitude, QString placeId, QString ownerId, const int type);
Поиск места по названию¶
Описание: Функция поиска места по названию в указанной географической локации.
Параметры:
text
- поисковая строка.latitude
- географическая широта места.longitude
- географическая долгота места.radius
- радиус поиска.
Прототип:
void searchPlaces(QString text, QString latitude, QString longitude, QString radius);
Создание нового места¶
Описание: Функция создания нового места в указанной географической локации. Возвращает идентификатор созданного места.
Параметры:
title
- название места.latitude
- географическая широта места.longitude
- географическая долгота места.type
- тип места.address
- адрес места.
Прототип:
QString createPlace(QString title, QString latitude, QString longitude, QString type, QString address);
Отметка¶
Описание: Отметиться в заданном месте. Возвращает статус транзакции.
Параметры:
placeId
- место в котором нужно отметиться.title
- подпись к отметке.
Прототип:
bool checkIn(QString placeId, QString title);
Драйвер¶
Архитектура драйвера
Общий формат запросов и ответов¶
Формат запроса:
<Request class="" function = "" noAuthorize="true"> <Params> </Params> </Request>
noAuthorize - флаг, запрещающий библиотеке вызывать webauth (необязательный параметр, по умолчанию false)
class - класс, к которому относится вызываемая функция
function - имя функции
Params - набор параметров, строго определенный для каждой функции
Формат ответа:
<Response class="..." function = "..." authorized="true" upload="..." download="..."> <Params> </Params> </Response>
authorized - флаг, показывающий происходила ли авторизация при выполнении запроса, не устанавливается, если при выполнении запроса возникла ошибка
upload - количество байт отправленных на сервер
download - количество байт полученных с сервера
- settings: класс для работы с настройками
- places: класс для получения данных о местах
- events: класс для получения данных о событиях
Трассируемость требований¶
Общие требования¶
Функциональные требования | ||
---|---|---|
Приложение Places | Приложение Events | |
SR.FUSRA.01(Создание аккаунта) | Форма UIEH_8 | |
SR.FUSRA.02(Настройки сети) | Форма UIEH_9 | |
SR.FUSRA.03(Выбор аккаунта) | Форма UIEH_6 | Форма UIEH_7 |
Приложение Events¶
Функциональные требования | ||||||
---|---|---|---|---|---|---|
Форма UIEH_1 | Форма UIEH_2 | Форма UIEH_3 | Форма UIEH_5 | Форма UIEH_6 | Форма UIEH_4 | |
SR.FUSRE.01(Получение списка событий) | + | |||||
SR.FUSRE.02(Создание события) | + | |||||
SR.FUSRE.05(Поиск событий) | + | |||||
SR.FUSRE.03(Редактирование события) | (2)+ | (1)+ | ||||
SR.FUSRE.04(Удаление события) | (2)+ | (1)+ | ||||
SR.FUSRE.05(Изменение статуса) | + |
Примечание: (№) означает последовательность появления форм на экране.
Приложение Places¶
Функциональные требования | ||||
---|---|---|---|---|
- | Форма UIPH_1 | - | - | |
SR.FUSRP.01(Поиск места по названию) | ||||
SR.FUSRP.02(Получение списка отметок) | + | |||
SR.FUSRP.03(Создание нового места) | ||||
SR.FUSRP.04(Отметка) |
Updated by Никита Давыдовский over 12 years ago · 20 revisions