정상에서 IT를 외치다

[Android, MVP] 리뷰 받은 MVP 예제 with Room 본문

안드로이드

[Android, MVP] 리뷰 받은 MVP 예제 with Room

Black-Jin 2019. 4. 7. 15:42
반응형

안녕하세요. 블랙진입니다.


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 를 활용하여 코드를 좀 더 다듬어 공유하겠습니다.


> MVP 예제 with Dagger




반응형
Comments