일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 브런치작가되기
- 한달어스
- 지지않는다는말
- 캐치마인드
- 베드테이블
- T자형인재
- 면접
- 안드로이드
- 1일1커밋
- 목적중심리더십
- 한단어의힘
- 베드트레이
- 프래그먼트
- 어떻게 나답게 살 것인가
- 끝말잇기
- 북한살둘레길
- 리얼하다
- 목적 중심 리더십
- 커스텀린트
- 좌식테이블
- 소프시스
- 자취필수템
- 아비투스
- 소프시스 밤부 좌식 엑슬 테이블
- 슬기로운 온라인 게임
- 함수형 프로그래밍
- 재택근무
- 한달브런치북만들기
- 한달독서
- 테트리스
- Today
- Total
정상에서 IT를 외치다
[Android, MVP] 리뷰 받은 MVP 예제 with Room 본문
안녕하세요. 블랙진입니다.
2019 드로이드 나이츠에서 우연찮게 코드 리뷰 받을 수 있는 기회가 생겨 MVP 기본 예제 - Room 활용 예제를 리뷰받아 보았습니다. 구글에서 제안하는 MVP 에 맞게 잘 작성했는지 요청을 드렸는데요. 이때 받은 피드백을 반영하여 새로 다듬은 MVP에 대해 포스팅하겠습니다.
- 2019 드로이드 나이츠 후기는 여기서 확인할 수 있습니다 :)
MainPresenter
<기존>
MainPresenter() {
this.api = GithubApiProvider.provideGithubApi();
this.disposable = new CompositeDisposable();
}
<수정>
MainPresenter(MainContract.View view,
GithubApi api,
UserDao userDao,
CompositeDisposable disposable) {
this.view = view;
this.api = api;
this.userDao = userDao;
this.disposable = disposable;
}
MainPresenter 생성자에서 view, api, dao, disposable 을 받아오게 수정했습니다. 기존에는 MainPresenter 에서 객체를 생성해 초기화 해주었지만 외부에서 객체를 주입해 의존성을 낮추는 것이 좋은 방법입니다.
MainActivity
<기존>
@Override
public void onClick(User user) {
// UserDatabase 에 저장합니다.
presenter.addUser(
UserDatabaseProvider.getInstance(this).getUserDao(),
user);
// DetailActivity 로 이동합니다.
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra(DetailActivity.KEY_USER, user);
startActivity(intent);
}
<수정>
View
@Override
public void onItemClick(User user) {
presenter.addUser(user);
}
Presenter
@Override
public void addUser(User user) {
disposable.add(
Observable.just(user)
.subscribeOn(Schedulers.io())
.subscribe(
item -> {
userDao.add(item);
view.goToDetailActivity(user);
},
error -> {
view.showViewToast(error.getMessage());
}
)
);
}
MainActivity 에서 유저를 클릭하면 room 에 데이터를 저장하고 DetailActivity 로 이동하는 로직입니다. 여기서는 room 에 데이터를 저장하는데 실패 혹은 성공 여부에 상관 없이 DetailActivity 로 이동하게 되어 있습니다. 이를 Presenter 에서 Model 인 room 의 데이터 결과를 받고 처리 할 수 있게 수정 했습니다.
코드 네이밍
1. Package 에서는 모두 소문자로 쓴다.
rxEventBus -> exeventbus 로 수정
2. 초기화는 init 으로 해준다.
setRxEventBus -> initRxEventBus
정리
기존 코드에서는 Model 에서 받은 데이터의 반환 여부와 상관없이 View 코드를 실행시켰습니다. 이 부분에서 Model 에서 값을 받고 Presenter 에서 반환 값을 확인 후 View 를 실행시켜 주는 부분의 작성이 많이 미흡하다는 것을 느꼈습니다. 그 외에 네이밍 규칙이나 사소한 부분에 대해 많은 조언을 받았습니다.
수정된 코드는 깃허브에서 확인하실 수 있습니다. 추후 Dagger 를 활용하여 코드를 좀 더 다듬어 공유하겠습니다.
'안드로이드' 카테고리의 다른 글
[Android, 단축키] 내가 자주 사용하는 단축키 정리 for MAC (8) | 2019.04.11 |
---|---|
[Android, IDE] 안드로이드 코딩속도를 높여주는 템플릿 (2) | 2019.04.11 |
[Zip, CombineLater, WithLatestFrom] 리액티브 예제 따라하기 (0) | 2019.04.04 |
[Android, ReUsingLayout] include, viewStub, merge 태그 사용하기 (2) | 2019.04.04 |
[Android, Cache, Bitmap] 내부저장소에 비트맵 저장하기 (8) | 2019.04.03 |