0

我正在使用MVP构建应用程序,并且正在使用存储库模式。 我有一个本地数据源,这是一个数据库,我存储某些信息。 我有一个远程数据源,在其中使用Retrofit,我发出一个API请求。该请求有一个@Query,这是一个存储在SharedPreferences中的字符串。 我想将SharedPreferences作为数据源添加到存储库中,但是由于远程数据源应该使用这些SharedPreferences - 这将是远程数据源 - 我没有看到这个体系结构如此清晰。Android:MVP和SharedPreferences中的存储库模式

非常感谢您的帮助。

回答

4

我认为很多人对存储库的想法复杂化。 Repository模式实际上只是Facade模式的特定类型。它只是位于真实数据源(模型)和消费者之间的抽象层。

假设我们有一个处理天气数据的系统。在这种情况下,我看没有错,有三个莫代尔类:

  • WeatherHttp
  • WeatherDb
  • WeatherPrefs

这些可以在你的仓库类的所有成员可以通过构造函数注入。所有这三个是从消费者(UI)单个存储库类的背后隐藏:

  • WeatherRepository

可能有一个单一的公共方法:

public void getWeatherForecasts(Callback<List<Forecast> forecastCallback); 

或Rx:

public Observable<List<Forecast>> getWeatherForecasts(); 

该方法的幕后你会不妨做一个http调用来获取最新的数据,一个数据库调用来保存大部分的细节,以及一个共享的prefs编辑来保存最后一次数据被获取的时间戳。这个想法是你随时可以随时更改实施,消费者不会在意。

关于实现存储库的一个最重要的事情是你不能泄漏实现细节。存储库的公共API不应公开网络类,数据库DAO或SharedPreference键。

+0

感谢您的回复,我会更新我的文章并添加一些代码。 – noloman