具有不同本地和远程行为的存储库模式

时间:2018-07-06 14:40:52

标签: android architecture repository-pattern

我有一个需要答案的问题。

我第一次尝试实现存储库模式,我在项目的大多数部分都成功实现了该模式,但是现在我不知道如何解决这个问题。

基本上,我需要更新用户的图片,因此在我的存储库中,我有一个

updatePicture(userId: Int, picture: File) 

界面,一切对于存储库实现和远程数据源实现都可以正常工作,但是您知道本地数据源不使用文件来表示用户的图片,而是使用url字符串,因此在接口应为本地数据源

updatePicture(userId: Int, picture: String)

但是由于存储库的概念使本地数据源实现了与远程数据源相同的接口,所以我不知道该如何解决。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这是两个不同的用例。这些方法实现不同的目的,因此应该采用不同的方法:picID = uploadPicture(picture:File),用于上传图片并为其分配ID;以及updateUserPictureReference(userId:int,picID:int),将该图片ID分配给用户。这样一来,您可以更轻松地将同一张图片分配给多个用户(即默认个人资料图片),或还原为以前使用的图片。

顺便说一句,我不会直接向用户分配URI,因为这会将您锁定在当前目录结构中。分配一个ID并在运行时使用该ID构建可预测的URI。如果您由于成功而决定稍后重组站点,则需要对其进行移动以提高性能,您可以轻松地做到这一点。使用数据库中的URI,您将不得不更新适当的数据。这也使调试变得更加容易,因为在开发过程中,您可以将所有链接都指向一个URL,而在生产中,它们可以指向其他位置。

答案 1 :(得分:0)

您可以将签名更改为使用Uri而不是File

// Instead of this:
updatePicture(userId: Int, picture: File)

// Use this:
updatePicture(userId: Int, picture: Uri)

这应该起作用,因为Uri可以使用不同的方案表示来自各种场所的资源。例如,您可以使用file://... URI表示本地文件资源,并可以使用HTTP与https://...来表示远程资源。