디자인패턴
MVC -> MVP -> MVVM
MVC
- Model : app에서 data및 data를 처리하는 부분 (POJO클래스, db, Server)
- View : UI (Activity, Fragment)
- Controller : 사용자의 INPUT을 처리하는 부분 (Activity, Fragment)
- View가 Model을 이용하여 업데이트 시 M-V 사이에 의존성
- Controller가 안드로이드에 종속됨 (테스트 어려움)
- 코드가 컨트롤러로 모여 액티비티가 커짐
- 사용자의 모든 input이 Controller에서 전달된 후
- Controller는 입력에 맞는 Model를 UPDATE
- Model은 업데이트한 data를 보여줄 View 선택하여 화면에 보여줌
MVP
- Model
- View: UI (Activity, Fragment)
- Presenter : View와 Model 의 다리, ui로직과 비즈니스로직 분리
- Controller 대신 Presenter 가 제어하면서 데이터흐름이 단일해짐
- View와 Presenter의 1대1 대응 (의존성 커짐)
- Model과 View간의 의존성이 없다 (테스트 쉬움)
- Presenter가 시간이 지날수록 비즈니스 로직이 모여 유지보수가 어려움
- 사용자의 모든 input이 view로 전달된 후
- Presenter가 입력에 맞는 Model를 UPDATE
- Model은 업데이트한 data를 보여줄 View 선택하여 UPDATE
MVVM
ViewModel
: 액티비티가 비대해지는 것을 막기 위해 사용됨
: View에 나타날 data를 관리함. 이 data는 Observerable data,
View가 이 data를 요청하여 업데이트함
- View -> View Model -> Model 순의 참조가 이루어짐 (분리개발가능)
- M-V 과 VM-V 사이의 의존성이 없음 (테스트 쉬움)
- 사용자의 모든 input이 view로 전달된 후
- ViewModel은 입력에 맞는 로직을 처리한 후 View에 데이터를 전달
- View는 ViewModel을 선택 후 바인딩하여 UPDATE
- Model이 변경되면 해당 ViewModel을 이용하는 View가 자동 UPDATE