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*(Отметка)||||| |