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