고통스러운 Presenter와 아프지 않은 Presenter
4200 단어 Android
미리 준비하다
MVP 아키텍처, 클린 아키텍처 등에서 프레젠터가 등장했다.
비즈니스 논리를 결합한 결과 등을 액티비티와 프래그먼트의 인터페이스 같은 것에 반영하기 위해서다.
개인적으로 프리젠터가'왜 이렇게 안 어울리지'라고 생각하는 부분을 썼을 뿐인데 여러분들은 어떻게 디자인하셨어요?
고통의 Presenter
프레젠터 자체가 고통스럽다기보다는 기본적인 디자인 마인드가 이런 패턴이다.
UseCase/Presenter/Repository가 교묘하게 헤어져도 RxJava에서는 지옥을 외면해도 기본적인 생각은 이렇다. 단지 상태 관리가 복잡해지는 경우가 많다.
interface XXXPresenter {
void showProgress();
void hideProgress();
}
이런 디자인 모델이 있다면 이미 고통스러운 디자인 모델이다.뭐가 아파요?
showProgress()
Activity나 Fragment로 반복해서 보여주면 되는데 이런 표현은 경솔하다실제로 Activity와 Fragment는 안드로이드 프레임워크에 규정된 생명주기를 혼자 가지고 있다.
showPregress()
온리썸(onResume)~onPause() 사이에서만 호칭을 받을지, 생애주기암을 무시하고 호칭을 받을지 결국 용례와 창고를 보지 않으면 알 수 없는...이런 경우는 쉽게 발생한다.그리고 차바퀴를 꺼낼 때는 봉인 처리가 필요한가, 아니면 봉인 처리가 필요한가.
봉인이 필요하다면
interface XXXPresenter {
void showProgress();
void hideProgress();
void enableEditor();
void disableEditor();
}
이렇게 덧붙이면 되나요?저기, 액티비티와 프래그먼트가 하고 싶은 일이 늘어날 때마다 프레젠테이터가 늘어나는 건가요?편집기를 켜거나 끄는 것은 해야 하는데, 이전 화면으로 돌아가는 것을 막아야 합니까?안 해요?
이런 느낌은 점점 컨디션이 늘어나 영문도 모르게 변한다.
말하자면 프레셔너는 액티비티와 프래그먼트에 대해 그렇게 잘 알고 있겠지?그런 생각도 든다.
(상대적으로) 고통스럽지 않은 Presenter
언뜻 보기에는 조립품이 아까보다 늘어나서 더 복잡할 수도 있지만 중점은 거기에 있지 않다.
가장 큰 포인트는 화면의 상태 이동이 사라졌다는 것이다.
Activity/Fragment는 자신의 라이프 사이클을 고려하여 상태 모델
subscribe
/unsubscribe
을 화면에 직접 매핑합니다.이 경우 UseCase/Presenter 는
class XXXXUsecase {
void postMessage(String body);
void subscribeFetchingState();
void unsubscribeFetchingState();
void subscribeMessageList();
void unsubscribeMessageList();
}
interface XXXXPresenter {
presentFetchingState(int state);
presentMessageList(List<Message> messages);
}
이렇게 되겠지.구체적으로 통신에서 무엇을 해야 하는지, Activity/Fragment에 의뢰하여 꼬르륵 소리를 내며 UI를 막는 것은 모두 Activity/Fragment의 자유입니다!
또 UseCase에서 subscribe부터 unsubscribe까지 present XXX()라는 규칙이 있어 라이프 사이클 고려도 쉬워졌다.
끝말
android-architectures의 코드를 읽었든 실제로 했든 무심결에 눈에 띄지 않는 부분만 썼다.이것은 사람을 실망시키는 소식이 아니다.
모두들 어떻게 설계했을까, 이 근처
Reference
이 문제에 관하여(고통스러운 Presenter와 아프지 않은 Presenter), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YusukeIwaki/items/0309e4034bf08b0f565e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)