Я не понимаю, как можно создать уровень данных, если каждый вызов базы данных асинхронен (через onChangeListeners). Вам просто нужно выполнять все вызовы базы данных в вашем пользовательском интерфейсе (поскольку он может обновляться асинхронно)?
Проблема, которую я вижу, заключается в том, что нам не нужно писать код специально для базу данных, когда мы пишем наши действия, модели просмотра и другую бизнес-логику.
Итак, абсолютно идеальной ситуацией было бы, если бы у нас был одноэлементный репозиторий, который загружает пользовательские данные при входе в систему, как модельные экземпляры. И тогда в идеальном сценарии мы можем нормально использовать эти экземпляры, не беспокоясь о базе данных.
Я не думаю, что эта идеальная ситуация может быть реализована на 100% (хотя в C# это возможно). , так кто знает?), но мне бы хотелось подойти как можно ближе.
Моя первая мысль заключалась в том, что конструктор каждой модели получает ссылку на каждое из ее свойств и регистрирует onChangeListener. который устанавливает свое свойство при изменении в базе данных (после инициализации на основе базы данных). Тогда установщики внутри каждой модели только обновляют базу данных (и модель обновляется асинхронно на основе базы данных).
Проблема этого подхода заключается в том, что после установки значения в экземпляре модели, будущий код не может зависеть от произошедшего изменения. Мы могли бы исправить это, предоставив каждой модели список лямбда-функций для каждого свойства, которое будет вызываться в onChangeListener для этого свойства. Хотя это может решить проблему обновления пользовательского интерфейса (поскольку это можно сделать асинхронно), бизнес-логика, которая ожидает немедленного изменения значений, все равно будет довольно неудобной (т. е. ее придется заключить в лямбду и добавить до обновления значения). ).
Другой подход заключается в том, чтобы сделать каждую модель совместимой с Firebase (это означает, что сериализуемые общедоступные методы получения и установки, а все свойства (включая другие объекты) будут храниться в поддереве этого объекта в Firebase JSON). Потом в твоем репозитории с синглтонами... Тут я не уверен. Это ядро мысли.
Другая возможность заключается в том, что у нас нет моделей, и мы просто всегда читаем и записываем в базу данных. Это звучит громоздко.
Подход, который может работать, но немного противоречит цели использования базы данных Firebase Realtime: загрузить все пользовательские данные в начале, предположить взаимное исключение, использовать хранилище синглтонов, делать все в памяти, а затем записывать состояние всех пользовательских данных в Firebase, когда приложение закрывается (или мы могли бы даже делать это асинхронно каждую минуту или около того). Мы могли бы добавить «грязные флаги» в наши модели и обновить их в наших сеттерах, чтобы нам не приходилось записывать все данные обратно. Что касается идей здесь, я думаю, что риск потери пользователем своих изменений намного выше, чем у других.
Подробнее здесь: https://stackoverflow.com/questions/791 ... tabase-app
Как создать уровень данных в приложении базы данных Android Firebase Realtime? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
База данных Firebase Realtime и аутентификация Firebase в Android Studio
Anonymous » » в форуме JAVA - 0 Ответы
- 90 Просмотры
-
Последнее сообщение Anonymous
-
-
-
База данных Firebase Realtime и аутентификация Firebase в Android Studio
Anonymous » » в форуме Android - 0 Ответы
- 43 Просмотры
-
Последнее сообщение Anonymous
-