MVI
종류: Architecture
MVVM이 양방향이고 MVI는 단방향!
viewModel이 너무 많은 일을 하다보니 어디서 mutation을 하는지 좀 어렵다는 문제 발견해서 알게 된 게 바로 MVI
메인 골
-
data의 흐름을 잘 관리하고 싶다!
- 많은 아키텍처가 단방향 아키텍처를 모방하고 있음
- 기존의 뷰모델은 양방향!
MVI
Model
- 화면에 보여질 Data 를 가지고 있음
View
- Model 을 참조하여 Data 를 보여줌
Intent
- 유저의 Action에 대한 핸들링, 라이프 사이클에 따른 실행등을 담당
Container
- Intent 와 Model 은 컨테이너에 담겨 View 에서 instance 를 들고 있는 형태
Q. 왜 container가 intent, model을 가지고 있는 건가요??
A. container를 사실 안쓰고 벗겨서 쓰긴 한대… 자기도 모르겠대… 경험한 바로는 프레임워크에 따라서 퍼포먼스가 안나오는 경우도 있어서 벗겨서 쓰는 편
가장 핫한 애가 TCA가 제일 핫하대…
TCA
https://github.com/pointfreeco/swift-composable-architecture
container가 store라는 이름으로 사용됨
ReactorKit
uiKit에서 유명한 거는 ReactorKit
https://github.com/ReactorKit/ReactorKit
0.4.0 유니와플에서는 viewInput은 intent, viewOutput은 model인 셈..!! 그니까 MVVM이지만 MVI개념이 섞여있는!
Q. mvi, mvvm의 차이
A. 단방향, 양방향, view에서 변경하면 안되고…무조건 명확해야 함!! 뷰는 state의 값을 바꾸면 안되고 무조건 바꾸면 안됨!! view가 intent에는 이벤트 알림만 가능해야 함
뷰모델은 뷰모델의 값을 뷰에서 바꾼다거나와 같은 기능 가능
MVI는 구조자체로 변경이 불가능하다 이말인거지… MVVM에서도 사실 안되는 걸 추천하지만 하려면 할 수 있는 구조이기 때문…
https://github.com/ReactorKit/ReactorKit
여기에 있는 예시해보기🙂