繁体   English   中英

Android Studio Room Persistence - 每个实体是否应该有一个单独的DAO,这对存储库类有何影响?

[英]Android Studio Room Persistence - Should each entity have a seperate DAO, and how does that effect the repository class?

如果我有一个包含两个表/实体(A和B)的数据库(DB),我应该为每个实体制作一个DAO吗? (即DAO_A和DAO_B),或者我为包含这两个表的整个数据库制作DAO?

然后关于存储库,这将是整个数据库(整个数据库)的存储库,还是只有相关DAO的数据库的存储库,我想要类(即DAO_A和DAO_B)。 (我认为我在这里问的是数据库是否有多个存储库或只有一个存储库,并且每个实体都必须拥有自己的DAO,或者我可以制作一个通用的D

我会说每个实体都有自己的DAO。 为什么? 因为你正确地分开了它们。

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


关于你的第二个问题:我认为这取决于你的架构你的存储库应该如何建模。

例如,使用MVVM时:

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

然后你的ViewModel将提供类似getAllImageModels的功能。 每个ImageModel都包含一个图像(将显示)。 在此函数内部,Repository被称为API调用以检索要下载的图像列表,或者调用数据库调用以从数据库中检索列表(取决于Internet连接)。 这些图像也必须下载。 同样,图像可以从本地缓存加载或通过API下载。 然后,ViewModel将它们包装在View所需的所需模型中,就可以了。

正如您在此简单示例中所看到的,Repository本身只是执行请求。 要么是本地文件系统,数据库或API。 它可能包含getImageListFromDbgetImageListFromAPI等函数。 因此,使用它的类只需要决定何时使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM