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

Android: Repository pattern in MVP and SharedPreferences

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

非常感谢您的提前帮助。

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

假设我们有一个处理天气数据的系统。在这种情况下,我认为拥有三个 Modal classes:

没有任何问题
  • WeatherHttp
  • WeatherDb
  • WeatherPrefs

这些都可以是通过构造函数注入的存储库 class 的成员。所有这三个都对单个存储库后面的消费者 (UI) 隐藏 class:

  • WeatherRepository

可能只有一个 public 方法:

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

或接收:

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

在该方法的背后,您很可能会进行 http 调用以获取最新数据,进行数据库调用以保存大部分详细信息,并进行共享首选项编辑以保存上次数据的时间戳拿来了。这个想法是您可以随时自由更改实现,而消费者不关心。

关于实现存储库最重要的一件事是你不能泄露实现细节。存储库的 public API 不应公开网络 classes、数据库 DAO 或 SharedPreference 密钥。