在基于导航的应用程序中存储复杂数据的位置
Posted
技术标签:
【中文标题】在基于导航的应用程序中存储复杂数据的位置【英文标题】:Where to store complex data in the navigation-based application 【发布时间】:2020-05-12 23:35:07 【问题描述】:我有一个应用程序,其中包含我在页面之间需要的大量数据,例如: 设计设置、用户参数、扫描仪访问、打印机队列,在一个页面上计算和形成的多项内容将在其他页面上使用。
该应用程序的总体思路是:您在每个页面上快速选择选项或输入数据,然后形成订单,发送并打印。
我有几个存储库用于不同的东西,但我不知道如何从目标片段访问它们。
我对 android 还很陌生,所以我试图找到构建这个系统的最佳方法,但没有成功。 到目前为止我发现了什么:
房间 - 我不这么认为。老实说,我尝试了几个星期,但加载和保存数据的速度非常慢,尤其是当它只是一堆菜单页面一个接一个地翻动时。另外,我不需要在会话之间在本地保存数据,所以它有点忽略了本地数据库的意义。
在片段之间发送一些简单的字符串/数字 - 对每个菜单所需的一切进行序列化/反序列化听起来不太好。
ViewModel 工厂 - 这样您需要在某处创建和存储 ViewFactory,然后从每个片段访问它,然后用它构建一个新的 ViewModel。可能会起作用,但看起来很奇怪。它应该如何工作?我们在“主”视图模型中有一个到工厂的链接,然后获取到这个“主”应用程序的 VM 的链接,读取工厂,然后初始化本地片段的 VM?
一个大型应用程序的 ViewModel - 听起来不对:太大、太笨重。
单身人士 - 真可惜。
依赖注入 - 我还没有尝试 Dagger(现在就去)。是不是我要找的东西?
我在这个主题上尝试了很多谷歌,但所有的答案看起来都像:“这里是如何在屏幕之间传递一个简单的字符串”,人们如何组织更复杂的应用程序?也许有一种更复杂的方法可以将应用程序状态拆分为某种服务或我缺少的其他术语。
能否请您帮助我从状态和数据方面了解正确的应用程序架构?
【问题讨论】:
【参考方案1】:我认为您的解决方案介于会话实现(在内存中或使用 Room)和 ViewModel
之间,用于屏幕依赖于另一个屏幕的部分。如果它是一个流,我建议您使用一种方法在片段之间共享ViewModel
,例如this 或this(我使用并推荐),然后将其设置为流的其余部分的状态,导致共享数据在某些配置更改后仍然存在。如果您需要在整个应用执行过程中保留这些设置,您应该使用简单的类单例或 Room 实现来实现会话。
【讨论】:
以上是关于在基于导航的应用程序中存储复杂数据的位置的主要内容,如果未能解决你的问题,请参考以下文章