MVP + Repository Pattern




No Silver Bullets

Frederick P. Brooks
1986
Many Problems
Design
Performance
Quality
Architecture
Tools
Examples
Examples

Examples

Many bullets, any silver bullet

Really Simple App

MVC Conventional
View
Controler
Model
MVC Conventional

Init View
Show Progress
Fetch
Show Stories
Show Error
Retry
Create Intent
Launch Intent
And what if the client says...

Likes
Filters
Landscape
Offline
Animations
Single Responsability

Services
Repositories
Presenters
View
Controllers
Dependency Inversion

View
Controller
Yo modifico la vista
public interface View{
void setProgressVisible(boolean visible);
void showStories(List<TopStory> stories);
void showRequestError();
void launchActivity(Intent intent);
}Presenter
Yo tomo las decisiones
public interface UserActionListener{
void requestTopStories();
void storyDetail(TopStory item);
}Repository
Yo consigo los datos, tengo fuentes confiables
public interface TopStoriesRepository {
interface FetchStoriesCallback {
void onSuccess(List<TopStory> stories);
void onError(Throwable t);
}
void fetchTopStories(FetchStoriesCallback callback);
}Services
Fuentes de datos
public interface TopStoriesApiService {
interface TopStoriesApiCallback<T>{
void onLoaded(T stories);
void onError(Throwable t);
}
void fetchTopStories(
TopStoriesApiCallback<List<TopStory>> callback);
}
public interface TopStoriesLocalService {
interface TopStoriesLocalCallback<T>{
void onLoaded(T stories);
void onError(Throwable t);
}
void getLastTopStoriesSaved(
TopStoriesLocalCallback<List<TopStory>> callback);
}Services
Repositories
Presenters
View
Controllers
requestTopStories()showProgress(true)fetchTopStories(...)fetchTopStories(...)onLoaded(...)onSuccess(...)showStories(stories)Services
Repositories
Presenters
View
Controllers
requestTopStories()showProgress(true)fetchTopStories(...)fetchTopStories(...)onError(...)lastStoriesSaved(...)onError(...)onError(...)showRequestError(...)Trabajando con flavors
productFlavors {
mock {
applicationIdSuffix = ".mock"
}
prod {
}
}Mock
Prod
Service Implementation
mRetrofitApiService.fetchTopStories()
.enqueue(new Callback<TopStoriesResponse>() {
@Override
public void onResponse(Response<TopStoriesResponse> response,
Retrofit retrofit) {
callback.onLoaded(response.body().getStories());
}
@Override
public void onFailure(Throwable t) {
if (BuildConfig.DEBUG)
t.printStackTrace();
callback.onError(t);
}
});List<TopStory> dummyStories = new ArrayList<>();
for (int i = 0; i < 10; i++) {
dummyStories.add(new TopStory());
}
callback.onLoaded(dummyStories)Injection
public class Injection {
public static TopStoriesRepository
provideTopStoriesRepository(){
return TopYorkRepositories
.getTopStoriesRepository(
TopStoriesApiClient.getInstance(),
TopStoriesLocalServiceImpl.getInstance());
}
}FAQ




That's it!
silmood
@silmood
MVP + Repository Pattern
By Petter Hdz
MVP + Repository Pattern
- 1,626