Android:MVP和SharedPreferences

时间:2017-05-23 18:00:19

标签: android repository-pattern retrofit2 mvp android-sharedpreferences

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:9)

我认为很多人过度复杂了存储库的概念。存储库模式实际上只是Facade模式的一种特定类型。它只是一个位于真实数据源(模型)和消费者之间的抽象层。

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

  • WeatherHttp
  • WeatherDb
  • WeatherPrefs

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

  • WeatherRepository

可能只有一个公共方法:

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

或Rx:

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

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

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