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 密钥。
我正在使用 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 密钥。