- •Онлайн-агрегатори
- •Принцип роботи арегаторів новин
- •Існуючі онлайн агрегатори
- •Yandex.Лента
- •Існуючі додатки для сервісу TheOldReader
- •Api сервісу TheOldReader
- •Універсальна програмна платформа Windows
- •Особливості uwp
- •Мови програмування uwp
- •Висновки
- •Створення та розвиток c#
- •Особливості мови
- •Назва мови
- •Стандартизація
- •Поняття бази даних
- •Моделі організації даних
- •Реляційна модель даних
- •Мова sql
- •Інструкції мови управління транзакціями
- •Програмні системи управління базами даних
- •Субд sqLite
- •Висновки
- •Модель бд для збереження даних
- •Процес оновлення та збереження даних
- •Інструкція для користувача
- •Вихідний код програмного продукту
- •Висновки
- •Висновки
- •Список використаних джерел
-
-
-
-
Модель бд для збереження даних
-
Структура даних, що описана вище, підходить для того щоб успішно десеріалізувати об’єкти отримані з сервера, але вона не підходить для збереження даних в локальній БД через складну структуру. Річ у тому, що SQLite лише імітує ORM «що описано на офіційному сайті додатку [16]», але не являється такою, тому вона може оперувати тільки простими типами даних. В нашому випадку всю структуру можна звести до однієї таблиці, яка виглядає наступним чином:
[Table("FeedItem")]
class FeedItem : INotifyPropertyChanged
{
[PrimaryKey]
public string id { get; set; }
public string title { get; set; }
public string timestampUsec { get; set; }
public string dateTime
{
get { return DataController.UnixTimeStampToDateTime(timestampUsec).ToString("HH:mm:ss dd.MM.yyyy"); }
}
public string href { get; set; }
public string content { get; set; }
public string author { get; set; }
public string tagid { get; set; }
public string tagName { get; set; }
public string streamId { get; set; }
public string streamName { get; set; }
private bool _isReaded;
public bool isReaded
{
get { return _isReaded; }
set { _isReaded = value; NotifyPropertyChanged(); }
}
public Visibility VisibilityIsReaded
{
get { return isReaded ? Visibility.Collapsed : Visibility.Visible; }
}
public Brush ReadedForeground
{
get { return isReaded ? new SolidColorBrush(Colors.Black) : new SolidColorBrush(Colors.Blue); }
}
private bool _isStarred;
public bool isStarred
{
get { return _isStarred; }
set { _isStarred = value; NotifyPropertyChanged(); }
}
public Symbol SymbolIsStarred
{
get { return isStarred ? Symbol.SolidStar : Symbol.OutlineStar; }
}
private bool _isLiked;
public bool isLiked
{
get { return _isLiked; }
set { _isLiked = value; NotifyPropertyChanged(); }
}
public string SymbolIsLikedStr
{
get { return isLiked ? "\U0000E00B" : "\U0000E006"; }
}
}
Тобто, модель «сирих» даних «рис. 3.1» в процесі синхронізації перетворюється в одну таблицю яку можна використовувати з додатком SQLite «рис. 3.2», що дозволить використовувати прив’язку даних до елементів управління та перекласти більшість CRUD (Create, Read, Update, Delete) операцій з БД на додаток SQLite, замість того щоб описувати їх самостійно «що описано в пряцях [16, 24, 26, 27]».
Рис. 3.1. Схема моделі «сирих» даних (що приходять з сервера)
Рис. 3.2. Схема моделі локальної бази даних
-
Процес оновлення та збереження даних
Враховуючи описане вище, оновлення та збереження даних проходить у 3 етапи:
-
Отримання списку тегів (папок)
-
Отримання підписок для кожного тега
-
Отримання записів для кожної підписки
Справ в тому, що самі записи не містять у собі інформації до якого тегу вони належать, також там не має інформації про відмітки Starred, Liked, що також треба враховувати. Тому при отриманні записів з підписок ми рекурсивно записуємо в БД записи та присвоюємо їм ідентифікатор тега та підписки, для того щоб в подальшому користувач мав змогу фільтрації даних за цими параметрами.
Після цього з’являєтеся вся необхідна інформація для збереження даних в локальну БД та відображення їх користувачу.