@youkerni
Unity3D developer

Как передать данные из БД в UI?

У меня есть слой бд (данные текущей игровой сессии), которая реализует интерфейс IGameManager.
Так же есть слой UI в лице IUIManager, который хочет обновляться сразу после того, как обновится информация в БД. Задача - сделать архитектуру масштабируемой и не завязываться на конкретные реализации.

Я не понимаю как реализовать общение между данными двумя слоями и буду рад выслушать Ваши советы.

Что я пробовал и к каким выводам пришел:
1) Если решать проблему в лоб (для каждого поля в котором заинтересован IUIManager делать события внутри IGameManager'a) - получается очень раздутый интерфейс IGameManager.
2) Делать посредника между двумя слоями смысла не имеет, т.к. мы или будем вынуждены перейти на конкретные реализации, или вернемся к проблеме 1

У меня в голове зреет мысль общения при помощи сообщений (когда в каком-то конкретном GameManager изменяются данные, он отправляет сообщение IUIManager'у, в котором указывает какие конкретно данные были изменены и на какие). IUIManager, в свою очередь, "предлагает" это сообщение всем, допустим, IUIMember. IUIMember, в свою очередь, сам решает заинтересован ли он в сообщении, или нет. Нужно уточнить, что я понимаю что будет оверхед из-за того что IUIManager будет вынужден "предложить" КАЖДОЕ сообщение об изменении данных КАЖДОМУ IUIMember'у, и это меня пугает.

Имеет ли смысл так заморачиваться, или это делается иначе? Буду очень рад любому источнику который поможет приобрести знания в проектировании.
  • Вопрос задан
  • 190 просмотров
Пригласить эксперта
Ответы на вопрос 3
@grinat
Есть flux архитектура, которая этот вопрос решает. Она для web'а, но я встречал много статей и решений об ее использовании в юнити, советую глянуть, вероятно это то что ты ищешь, только там наверное с webapi(ajax, rest, comet), в твоем случае в его роли будет выступать бд, если там используется слово компонент, то это то вероятно называется виджет в юнити.
Ответ написан
Комментировать
@CHolfield
генерируй события (event) через делегаты (Delegate). как можно подробнее, каждое отдельное значимое изменение - отдельное событие. кому какие события надо отслеживать - тот подписывается. очередь обработки, мутексы/семафоры если надо в критичных участках.
упд: генерировать в слое БД, прямо при обработке результатов запросов.
упд2: блин не понял сначала, тебе такой метод не подходит почему-то. я других не знаю. буду следить за тредом.
Ответ написан
Комментировать
@p4p
"который хочет обновляться сразу" - зачем ему обновляться сразу? Разве не выгодней обновлять UI по мере необходимости? Допустим у вас есть скрытое UI и данные для отображения которых он предназначен обновились, вы будете его обновлять?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы