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

前端之家收集整理的这篇文章主要介绍了Java-Android Studio Room Persistence-每个实体都应有单独的DAO,这对存储库类有何影响? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

然后关于存储库,这将是整个数据库(整个DB)的存储库,还是仅包含我想要的类的相关DAO(即DAO_A和DAO_B)的数据库存储库.
(真的,我想我想问的是数据库将具有多个存储库还是只有一个存储库,并且每个实体都必须具有自己的DAO,或者我可以创建一个通用D

最佳答案
我会说,每个实体都有自己的DAO.为什么?因为您正确地将它们分开.

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

关于您的第二个问题:我认为这取决于您的体系结构应如何精确建模存储库.

例如,当使用MVVM时:

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

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

从这个简单的示例可以看到,存储库仅执行请求.本地文件系统,数据库或API.它可能具有像getImageListFromDb和getImageListFromAPI这样的函数.这样,使用它的类就必须决定何时使用什么.

猜你在找的Android相关文章