Russian Qt Forum
Май 04, 2024, 13:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] отношение QAbstactItemModel к асинхронно полученным данным.  (Прочитано 2888 раз)
unkeep
Гость
« : Апрель 09, 2014, 18:00 »

есть сервак. Асинхронно получаем с него данные.
как лучше реализовывать QAbstactItemModel?
 
1) хранить в модели копию полученных данных. При получении с сервака новых\изменённых данных  - добавлять\обновлять их и у модели.
2) хранить в модели указатель\ссылку на кеш данных. При получении с сервака новых\изменённых данных  - сообщать ей что кеш изменился и надо бы перестроиться.
3) хранить в модели объект данных, который сам сообщает ей о том что он изменился.
4) реализовать модель так, чтобы она не хранила данные вообще. Может как-то соединить data(QModelIndex&) c запросом на сервер...
5) ещё что-нибудь, до чего я не додумался...

может знает кто удачные решения сей задачи? Может паттерн есть какой?
« Последнее редактирование: Апрель 10, 2014, 09:14 от unkeep » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Апрель 09, 2014, 18:22 »

Получать данные с сервера при каждом обновлении экрана - это слишком расточительно, данные все равно придется кешировать.
Хранить данные внутри или снаружи модели зависит от того, нужны ли эти данные без модели. Если возможны режимы работы программы без отображения данных (или вообще без GUI), то наверное лучше иметь внешнее хранилище из которого модель берет данные.
Вариантов много, добавьте конкретики. Улыбающийся
Записан
Bepec
Гость
« Ответ #2 : Апрель 09, 2014, 18:47 »

В начале брать всё, потом получать только изменения.
Записан
unkeep
Гость
« Ответ #3 : Апрель 09, 2014, 23:43 »

Получать данные с сервера при каждом обновлении экрана - это слишком расточительно, данные все равно придется кешировать.
Хранить данные внутри или снаружи модели зависит от того, нужны ли эти данные без модели. Если возможны режимы работы программы без отображения данных (или вообще без GUI), то наверное лучше иметь внешнее хранилище из которого модель берет данные.
Вариантов много, добавьте конкретики. Улыбающийся

есть данные которые отображаются в двух вьюхах. В них есть общая часть. +могут всплывать диалоги, которые тоже отображают какие-то данные. И да, хотелось бы не завязываться жёстко на гуи.
Значит внешенее хранилище. Хорошо. Остаётся определиться как модель будет узнавать о его изменении. Вижу два варианта: 1) viewModel имеет указатель на хранилище, то в свою очередь сигнализирует о любых изменениях. Внутри моделей ловим сигналы и обрабатываем. 2)хранилище просто структура данных. Тот кто его изменяет должен сообщить это моделям.
1?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #4 : Апрель 10, 2014, 07:38 »

Да, модель содержит ссылку на хранилище и берет из него данные. Хранилище сигналит о любых изменениях, модель получает эти сигналы и генерирует уже свои для вьюшки.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 23.