Project

General

Profile

Design » History » Version 19

Никита Давыдовский, 04/17/2012 11:51 AM

1 1 Алексей Филиппов
h1. Проект архитектуры
2
3 10 Никита Давыдовский
{{TOC}}
4
5 1 Алексей Филиппов
Модель архитектуры представлена на следующей схеме:
6
7
!https://redmine.cs.karelia.ru/attachments/download/83/850px-MS_Arch_mods.png!
8
9
h2. Описание уровней архитектуры
10
11
*Сетевой уровень (Network layer)* объединяет используемые социальные сервисы и среду передачи данных. В архитектуре представлены сервисы ВКонтакте, Facebook и Flickr. Каждый сервис предоставляет доступ к данным посредством собственного протокола. В настоящий момент в проекте MySocials реализована поддержка протоколов на основе XML и JSON.
12
13
*Транспортный уровень (Transport layer)* представляет собой набор библиотек доступа к социальным сервисам (драйверов). Основная задача драйвера - выполнять запросы к сервису для получения или отправки данных. Один запрос к драйверу может быть реализован в виде серии запросов к сервису.
14
15
*Промежуточный уровень (Middleware layer)* обеспечивает единый программный интерфейс (MySocials API) доступа к социальным сервисам. API реализован на основе XML. Для более удобной реализации приложений с использованием социальных сервисов реализована Qt библиотека (Core). Библиотека предоставляет набор базовых классов, средства кэширования для автономной работы и объединяет составные запросы.
16
17
*Пользовательский уровень (User layer*) объединяет разработанные приложения и плагины.
18
* Плагины для Qt Messaging Framework (QMF plugins) предоставляют доступ к социальным сервисам аналогично доступу к почтовым сервисам.
19
* Плагины приложений (Application plugins) реализуют работу с социальными сервисами в различных приложениях. В настоящий момент реализован плагин для Telepathy framework и плагин импорта контактов в адресную книгу Maemo.
20
* Консольное тестовое приложение (Console application) позволяет проверить работоспособность драйверов и выполнять запросы на основе MySocials API.
21
* Приложение для просмотра изображений социальных сервисов (Gallery)
22
* Приложение для работы с социальными сервисами (MySocials)
23
24
h2. Описание подсистем
25
26
*Ядро (Core)* – Подпрограмма, отвечающая за перенаправление запросов от других модулей к драйверам и наоборот, контроль использования оперативной памяти программой, выполнение повторяющихся задач(проверка сообщений, проверка друзей и т.д.) 
27
Включает в себя:
28
29
* Менеджер Событий - модуль, выполняющий через определенный промежуток времени повторяющиеся задача (проверка на новые сообщения и т.д.)
30
* Модуль перенаправления запросов - модуль, который перенаправляет запросы, полученные от подпрограмм к драйверам
31
32
*Драйвер (Driver)* - подпрограмма реализующая взаимодействие с определенным сервисом или их группой 
33
Включает в себя:
34
35
* Модуль получения запросов от ядра
36
* Отправка запросов и получение ответов от сервиса
37
* Обработка ответа от сервиса
38
* Модуль отправки ответа ядру
39
40
*Интерфейс пользователя (UI)* - Подпрограмма содержащая графический интерфейс пользователя. Содержит функции по выводу информации пользователю, вызывает функции из виджетов. Включает в себя: 
41
Включает в себя:
42
43
* Формы с компонентами из виджетов
44
45
*Виджеты (Widgets)* - Набор компнентов, содержащих логику работу интерфейса. Виджеты располагаются на уровне конечного приложения. Включают в себя:
46
47
* модули(менеджеры) для соединения графического интерфейса и ядра
48
* модели данных полученные от ядра и методы доступа к ним
49
* функции обработки событий, поступающих от графического интерфейса
50 2 Алексей Филиппов
51
h1. Ядро
52
53
!https://redmine.cs.karelia.ru/attachments/download/84/850px-MSCore_Arch.png!
54
Архитектура ядра
55
56
*Структуры данных*
57
58
В проекте MySocials для хранения данных используются специальные классы-хранилища. Каждому объекту социальной сети соответствует свой класс. Все классы должны наследоваться от базового класса (Base object), содержащего общие для всех объектов поля и методы.
59
60
Поля класса @baseobject@:
61
62
<pre>
63
QString serviceId; // Id сервиса.
64
QString accountId; // Id аккаунта. 
65
QString ownerId;   // Id владельца объекта. 
66
QString objectId;  // Id объекта.
67
QString icon_url;  // Путь до иконки объекта. 
68
bool isPrivate;    // True если объект имеет ограниченный доступ и не может быть загружен с сервиса.
69
bool isEmpty;      // True если в объекте ничего нет, иначе - false.
70
</pre>
71
72
Методы класса @baseobject@:
73
74
<pre>
75
/* Генерирует имя файла на основе пути и ссылки на объект. */
76
const QString generateFileName(const QString &path, const QString &obj) const;
77
</pre>
78
79
Поля класса @event@:
80
81
<pre>
82
QString title;        // Название события.
83
QString description;  // Описание события.
84
QString startTime;    // Время начала события.
85
QString endTime;      // Время завершения события.
86
QString updateTime;   // Время последнего обновления информации о событии.
87
QString location;     // Географическое место расположения.
88
QString privacy;      // Приватность.
89
QString creator;      // Идентификатор пользователя создавшего событие.
90
QString icon;         // URL иконки события.
91
QString rsvpStatus;   // Статус участия.
92
</pre>
93
94
Методы класса @event@:
95
96
<pre>
97
/* "Упаковать" данные в XML формат. */
98
QDomElement toQDomElement(QDomDocument& doc) const;
99
</pre>
100
101
<pre>
102
/* Переопределение предыдущего метода. Во входных параметрах добавлен источник данных. */
103
static QDomElement toQDomElement(QDomDocument& doc, const Event& src);
104
</pre>
105
106
<pre>
107
/* Загрузить данные из XML. */
108
static Event fromQDomElement(const QDomElement& fr, const QString& srvcId, const QString& accountId, 
109
                             const QString& friendId);
110
</pre>
111
112
h1. Функции ядра
113
114
h2. Получение списка событий
115
116
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что сообщения получены.
117
118
*Параметры:*
119
120
@userId@ - id пользователя чей список нужно получить.
121
@startTime@ - дата, начиная с которой нужно получить события (строка даты в формате UNIX_timestamp или ISO_8601).
122
@alsoLoadIcons@ - также загрузить иконки.
123
124
*Прототип:*
125
126
<pre>
127
void getEvents(QString userId, QString startTime, bool alsoLoadIcons)
128
</pre>
129
130
h2. Создание события
131
132
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекается eventId (id созданного события) и функция возвращает его.
133
134
*Параметры:*
135
136
@title@ - название события.
137
@description@ - описание события.
138
@startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601).
139
@endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601).
140
@location@ - место проведения.
141
@privacy@ - приватность.
142
143
*Прототип:*
144
145
<pre>
146
QString createEvent(QString title, QString description, QString startTime, QString endTime, QString location, 
147
                    QString privacy)
148
</pre>
149
150
h2. Редактирование события
151
152
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе редактирования (true/false) и эта информация возвращается из функции.
153
154
*Параметры:*
155
156
@eventId@ - id события которое требуется редактировать.
157
@title@ - название события.
158
@description@ - описание события.
159
@startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601).
160
@endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601).
161
@location@ - место проведения.
162
@privacy@ - приватность.
163
164
*Прототип:*
165
166
<pre>
167
bool editEvent(QString eventId, QString title, QString description, QString startTime, QString endTime, 
168
               QString location, QString privacy)
169
</pre>
170
171
h2. Удаление события
172
173
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе удаления (true/false) и эта информация возвращается из функции. Также функция удаляет информацию о событии из кэша.
174
175
*Параметры:*
176
177
@eventId@ - id события которое требуется удалить.
178
179
*Прототип:*
180
181
<pre>
182
bool deleteEvent(QString eventId)
183
</pre>
184
185 11 Никита Давыдовский
h2. Драйвер
186 2 Алексей Филиппов
187
!https://redmine.cs.karelia.ru/attachments/download/85/850px-MSDriver_Arch.png!
188 1 Алексей Филиппов
Архитектура драйвера
189 11 Никита Давыдовский
190 12 Александр Шитнев
191 14 Александр Шитнев
h2. Общий формат запросов и ответов
192 12 Александр Шитнев
193 14 Александр Шитнев
*Формат запроса:*
194 13 Александр Шитнев
<pre>
195 12 Александр Шитнев
<Request class="" function = "" noAuthorize="true">
196
      <Params>
197
            
198
      </Params>
199 1 Алексей Филиппов
</Request>
200 12 Александр Шитнев
</pre>
201 14 Александр Шитнев
_noAuthorize_ - флаг, запрещающий библиотеке вызывать webauth (необязательный параметр, по умолчанию false)
202
_class_ - класс, к которому относится вызываемая функция
203
_function_ - имя функции
204
_Params_ - набор параметров, строго определенный для каждой функции
205
206
*Формат ответа:*
207 13 Александр Шитнев
<pre>
208 12 Александр Шитнев
<Response class="..." function = "..." authorized="true" upload="..." download="...">
209
      <Params>
210
            
211
      </Params>
212 13 Александр Шитнев
</Response>
213 12 Александр Шитнев
</pre>
214 14 Александр Шитнев
_authorized_ - флаг, показывающий происходила ли авторизация при выполнении запроса, не устанавливается, если при выполнении запроса возникла ошибка
215
_upload_ - количество байт отправленных на сервер
216
_download_ - количество байт полученных с сервера
217 12 Александр Шитнев
218
* "settings":http://oss.fruct.org/wiki/Libvkontakte/xml-data/settings: класс для работы с настройками
219
220
* "places":http://oss.fruct.org/wiki/Libvkontakte/xml-data/places: класс для получения данных о местах
221
222
* "events":http://oss.fruct.org/wiki/Libvkontakte/xml-data/events: класс для получения данных о событиях
223
224 1 Алексей Филиппов
h2. Трассируемость требований
225
226 19 Никита Давыдовский
h3. Общие требования
227
228
|_.Функциональные требования|
229
||Приложение Places|Приложение Events|
230
|*SR.FUSRA.01*(Создание аккаунта)||"Форма _UIEH_8_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%9C%D0%B5%D0%BD%D1%8E-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82%D0%B0-UIEH_8|
231
|*SR.FUSRA.02*(Настройки сети)||"Форма _UIEH_9_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%81%D0%B5%D1%82%D1%8C%D1%8E-UIEH_9|
232
|*SR.FUSRA.03*(Выбор аккаунта)|"Форма _UIEH_6_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Geo-ui-harmattan#%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82%D0%B0%D0%BC%D0%B8-UIPH_6|"Форма _UIEH_7_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%9C%D0%B5%D0%BD%D1%8E-%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82%D0%BE%D0%B2-UIEH_7|
233
234 18 Никита Давыдовский
h3. Приложение Events
235 1 Алексей Филиппов
236
|_.Функциональные требования|
237 19 Никита Давыдовский
||"Форма _UIEH_1_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0-%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8C-UIEH_1|"Форма _UIEH_2_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-UIEH_2|"Форма _UIEH_3_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%9F%D0%BE%D0%B8%D1%81%D0%BA-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9-UIEH_3|"Форма _UIEH_5_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-%D0%9C%D0%B0%D0%BA%D0%B5%D1%82-UIEH_5|"Форма _UIEH_6_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-%D0%9C%D0%B0%D0%BA%D0%B5%D1%82-UIEH_6|"Форма _UIEH_4_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F-%D0%BE-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B8-UIEH_4|
238 1 Алексей Филиппов
|*SR.FUSRE.01*(Получение списка событий)|=.+||||||
239
|*SR.FUSRE.02*(Создание события)||=.+|||||
240 19 Никита Давыдовский
|*SR.FUSRE.05*(Поиск событий)|||=.+||||
241
|*SR.FUSRE.03*(Редактирование события)||||=.(2)+||=.(1)+|
242
|*SR.FUSRE.04*(Удаление события)|||||=.(2)+|=.(1)+|
243
|*SR.FUSRE.05*(Изменение статуса)||||||=.+|
244
245
_Примечание: (№) означает последовательность появления форм на экране._
246 18 Никита Давыдовский
247
h3. Приложение Places
248
249
|_.Функциональные требования|
250
||=.-|"Форма _UIPH_1_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Geo-ui-harmattan#%D0%9E%D1%82%D0%BC%D0%B5%D1%82%D0%BA%D0%B8-%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D0%BE%D0%B1%D0%BB%D0%B8%D0%B7%D0%BE%D1%81%D1%82%D0%B8-UIPH_1|=.-|=.-|
251
|*SR.FUSRP.01*(Поиск места по названию)|||||
252
|*SR.FUSRP.02*(Получение списка отметок)||=.+|||
253
|*SR.FUSRP.03*(Создание нового места)|||||
254 1 Алексей Филиппов
|*SR.FUSRP.04*(Отметка)|||||