Android 具有不同本地和远程行为的存储库模式
我有一个问题需要回答 我第一次尝试实现Repository模式,我成功地在项目的大部分部分实现了它,但现在我不知道如何解决这个问题 基本上我需要更新用户的图片,所以在我的存储库中我有一个Android 具有不同本地和远程行为的存储库模式,android,architecture,repository-pattern,Android,Architecture,Repository Pattern,我有一个问题需要回答 我第一次尝试实现Repository模式,我成功地在项目的大部分部分实现了它,但现在我不知道如何解决这个问题 基本上我需要更新用户的图片,所以在我的存储库中我有一个 updatePicture(userId: Int, picture: File) 接口,对于存储库实现和远程数据源实现来说一切都很好,但是您知道,本地数据源不使用文件来表示用户的图片,而是使用url字符串,因此在本地数据源中,接口应该是 updatePicture(userId: Int, picture
updatePicture(userId: Int, picture: File)
接口,对于存储库实现和远程数据源实现来说一切都很好,但是您知道,本地数据源不使用文件来表示用户的图片,而是使用url字符串,因此在本地数据源中,接口应该是
updatePicture(userId: Int, picture: String)
但由于存储库的概念使本地数据源实现了与远程数据源相同的接口,我不知道如何解决这个问题
感谢您的帮助您可以将签名更改为使用
Uri
而不是文件
:
// Instead of this:
updatePicture(userId: Int, picture: File)
// Use this:
updatePicture(userId: Int, picture: Uri)
这应该是可行的,因为
Uri
可以使用不同的方案表示来自各种地方的资源。例如,您可以使用file://...
URI和一个远程资源,可以使用HTTP和https://...
这是两个不同的用例。这些方法实现了不同的目的,因此应该是不同的方法:picID=uploadPicture(picture:File),用于上载图片并为其分配ID;updateUserPictureReference(userId:int,picID:int),用于为用户分配该图片ID。这使您可以更轻松地将同一张图片分配给多个用户(即默认配置文件图片),或恢复到以前使用的图片
顺便说一句,我不会直接将URI分配给用户,因为这会将您锁定到当前目录结构中。分配一个Id,并在运行时使用该Id构建一个可预测的URI。如果您稍后决定重新构建站点,因为您获得了如此成功,您需要移动它们以提高性能,那么您可以轻松地执行此操作。如果数据库中有URI,则必须更新相应的数据。这也使得调试更容易,因为在开发过程中,您可以让所有链接指向一个URL,而在生产过程中,它们指向其他地方。对不起,我需要更多的信息。我知道您有一个存储库接口和两个具体实现,一个用于执行网络请求并在服务器端更新图片,另一个存储库使用本地缓存(我假设它使用数据库、Room、ORMlite、Real等)。我明白你的意思,但问题是,当你做请求时,你应该在存储库实现中内部更新你的应用的缓存。请指定调用这两个方法的流程。您可以拥有缓存存储库、网络存储库和复合存储库(其中包含这些存储库的两个实例),然后执行网络请求并更新应用程序的缓存。但是我需要知道如何调用
updatePicture
方法。当您从网络存储库点击updatePicture
方法时,是否正在尝试从缓存存储库调用updatePicture
方法?谢谢,这很有帮助:)