我正在创建一个jetpack compose android应用程序,并且需要一些持久性数据-看起来jetpack DataStore是正确的选择。
对于我的应用程序,我将有一个文本列表(假设有20个文本,每个文本都有10个段落),这些文本也有元数据(例如标题)。我正在尝试确定我的数据存储的架构,但找不到关于它的性能特征的很多信息。我正在阅读aobut proto buffers,但以前从未使用过它们。
无论如何,这种架构(使用粗糙的伪代码)是否合理:
type Texts = Map(uuid -> Text) # top level store in my DataStore
object Text {
metatadata: {
name: string,
author: string
preview: string
},
textContent: long string or array of long strings
}
我是否能够MapMap的值,并提取所有元数据,以便在主屏幕上显示,而不会产生阅读所有大型文本内容的成本?或者我是否需要不同的顶级数据结构(一个用于文本元数据,另一个用于文本内容)?具体来说,我是否可以在性能上仅订阅Composable
中的嵌套元数据?
1条答案
按热度按时间pcww981p1#
无论你喜欢哪种数据存储系统,或者你可以同时使用这两种系统,你都可以通过使用接口的依赖关系反转并通过DI框架注入它来实现。
您可以创建一个
TextDataSource
接口,并创建RoomDataSourceImpl
或DataStoreSourceImpl
这样的实现,以保留本地数据,但只向Repository/UseCase/ViewModel公开TextDataSource。而且,是的,通过从房间数据库创建一个流,选择任何时候你的数据改变,你可以更新流。
在
Dao
接口中声明下面的函数在ViewModel或Composable中转换此流或将其收集为带有
Flow.collectAsState()
扩展State
,或将其更改为自定义ui状态,例如我收集它作为
用例仅用于执行业务逻辑,如果不需要,可以跳过它。
下面的官方文档解释了用例和域层。
https://developer.android.com/topic/architecture/domain-layer