단방향 아키텍처 (Uni-Directional Architecture) UDA
앱의 데이터 흐름이 한 방향으로 진행되고, 상태는 모델에서만 관리되는 형태 ex) FLUX - MVC의 단점(View와 Model이 서로 의존적)을 보완하기 위해 페이스북에서 고안
MVC
- 컨트롤러는 입력에 해당하는 모델을 업데이트
- View를 업데이트 하기위해서 모델가 뷰사이에 의존성이 존재
- Activity나 프래그먼트가 컨트롤러와 뷰 모두 처리하기때문에 한 클래스에서 MVC 모두 처리하게 됨
- 앱이 커지고 복잡해질수록 유지보수가 어려움
MVP 문제점 ( Presenter : View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분 )
- 상태정보가 뷰와 모델 두 곳에 존재
- 백그라운드에서 모델이 업데이트 될때 상태 정보 관리가 힘들다.
- View와 Model은 의존성이 없는 대신 View와 Presenter가 1:1로 강한 의존성을 가지게 됩니다.
- 뷰와 프리젠터와의 의존성 1대1관계
MVVM
- Command패턴이나 데이터 바인딩을 이용해서 뷰와 뷰모델간의 의존성을 없앨 수 있다.
단방향 아키텍쳐
- 데이터와 액션은 한방향으로만
- View에 영향을 주는 State는 한 방향으로만 수정할 수 있다 — 단방향
- Model은 State를 변화시키고 View는 State를 참조만 한다 — View와 State 분리
View — Action(Intent) — Store(Model) — View 이렇게 단방향으로 이루어지는 아키텍처 앞 액션이 끝난 후 뒤 액션을 실행한다 — 동기적 실행
단방향 아키텍처를 구성학기 위해 RxJava를 사용
MVI패턴 (Model - View - Intent)
인텐트가 유저를 관찰하고 모델이 인텐트를 관찰하고 뷰가 모델을 관찰하고 유저가 뷰를 관찰 인텐트는 안드로이드에서 쓰는 인텐트가 아니라 Action이라고 생각하면 될거 같다.
Comments