Android:MVP和SharedPreferences中的存储库模式

nol*_*man 2 mvp android repository-pattern android-sharedpreferences retrofit2

我正在使用MVP构建应用程序,而我正在使用存储库模式.我有一个本地数据源,这是一个存储某些信息的数据库.我有一个远程数据源,在其中使用Retrofit,我发出了API请求.该请求有一个@Query,这是一个存储在SharedPreferences中的String.我想将SharedPreferences作为数据源添加到存储库,但由于远程数据源应该使用这些SharedPreferences--这将是与远程数据源不同的数据源 - 我不再认为这种体系结构如此清晰.

非常感谢您的帮助.

Jah*_*old 10

我想很多人都会使存储库的概念复杂化.存储库模式实际上只是Facade模式的一种特定类型.它只是一个位于真实数据源(模型)和消费者之间的抽象层.

假设我们有一个处理天气数据的系统.在这种情况下,我发现有三个Modal类没有错:

  • WeatherHttp
  • WeatherDb
  • WeatherPrefs

这些都可以是通过构造函数注入的存储库类的成员.所有这三个都隐藏在单个存储库类后面的使用者(UI)中:

  • WeatherRepository

可能只有一个公共方法:

public void getWeatherForecasts(Callback<List<Forecast> forecastCallback);
Run Code Online (Sandbox Code Playgroud)

或者Rx:

public Observable<List<Forecast>> getWeatherForecasts();
Run Code Online (Sandbox Code Playgroud)

在该方法的幕后,您可能会进行http调用以获取最新数据,数据库调用以保存大部分详细信息,并使用共享prefs编辑来保存上次获取数据的时间戳.这个想法是你可以随时改变实施,消费者也不在乎.

实现存储库最重要的一点是您不得泄漏实现细节.存储库的公共API不应公开网络类,数据库DAO或SharedPreference键.