Android Studio Room的持久性 - 每个实体是否具有单独的DAO,以及如何影响存储库类



如果我有一个包含两个表/实体(a和b)的数据库(db),我应该为每个实体做一个dao吗?(即dao_a和dao_b),或者我要为包含这两个表的整个DB做一个dao?

就存储库而言,这将是整个数据库(整个db)的存储库,或者只是数据库的存储库,只有相关的dao我想要的类(即dao_a and dao_b)。(实际上我认为我在这里问的是数据库是否有多个存储库或一个存储库,每个实体都必须拥有自己的DAO,或者我可以做一个一般的D

我会说每个实体都有自己的dao。为什么?因为您将它们正确分开。

假设您将拥有一个包含实体A和B的DAO。在您的存储库中,您可能只需要实体A,那么该DAO也使用实体B也没有任何意义。如果发生案例,您需要两个实体,只需使用DAO。单独的DAO的另一个原因是您不知道如何正确夫妇。您将如何决定将哪些实体融入DAO中?是的,您可以根据使用它的存储库来决定这一点,但这可以导致代码重复(两个DAO使用相同的实体,但是每个实体也使用第二个实体 - 每个DAO都不同)。


关于您的第二个问题:我相信这取决于您的架构如何确切地建模您的存储库。

例如,使用MVVM:

要求:您有一项活动,只是显示从某个地方获取的图像列表。

然后,您的ViewModel将提供诸如getAllImageModels或类似内容之类的功能。这些成像模型中的每一个都包含一个图像(将显示)。在此功能内部,存储库称为API调用以检索要下载的图像列表或数据库调用以从数据库中检索列表(取决于Internet连接)。这些图像也必须下载。同样,图像可以从您的本地缓存加载或通过API下载。然后,ViewModel将它们包裹在视图所需的所需模型中,也就是IT。

您可以通过这个简单的示例看到,存储库独自执行请求。到本地文件系统,数据库或API。它可以在其中具有诸如getImageListFromDbgetImageListFromAPI之类的功能。因此,使用它的类只需决定何时使用。

最新更新