Upload
-
View
450
Download
2
Embed Size (px)
Citation preview
Flux in Android
2015.12.22
드라마앤컴퍼니 안드로이드 개발자 이승민
MVC
Controller Model View
Click 등 이벤트
비지니스 로직
MVC in Android
Controller
ModelView
Activity
Event
Activity
View 레퍼런스를 직접 잡고 모델에서 수행한 비지니스 로직을 View 에 반영한다 (Controller)
Model
비지니스 모델을 수행한다
결과
MVC
양방향
간단한 어플리케이션에서 직관적이고 좋다
MVC 문제점
양방향이기 때문에 뷰와 모델이 많아질수록 기하급수적으로 복잡해진다
하나의 View에 하나의 Event
하나의 View에 두개의 Event
하나의 View에 세개의 Event
두개의 View에 세개의 Event
비지니스 로직이 간단하고 모여있기 때문에 쉬워보이지만, 이벤트를 발생위치와 뷰 위치가 떨어져 있을 경우 매우 빠르게 복잡해진다
Flux
데이터를 뷰와 분리하여 단방향으로 흐르게 하자
Action & Dispatcher
Increase Action
Decrease Action
Multiply Action
Dispatcher
View로부터 받은 Action을 Dispatcher가 뿌려준다
Store
Singleton instance 데이터를 Static하게 갖고 있다
Dispatcher로부터 Action을 받아 데이터를 조작한다 조작 후 데이터가 바뀌었음을 알리는 Action을 생성한다
View
View가 바라보는 데이터의 Action이 감지되면, invalidate한다
결과
MVC vs Flux
View Event
View
데이터를 변화시키고 View에 적용한다 데이터만 변화시킨다Action & DispatcherController
vsvs
vsView 자체로써 다른 역할은 하지 않는다 데이터 변화를 감지해 변화한다
논란 1
위와같이 수많은 VIew와 Model이 관계를 맺는 경우는 적다
Flux가 굳이 필요한가?
논란 2
MVC는 하나의 Model에 대해 컨트롤러가 하나일 필요가 없다
Controller
Model
View
View
View
Controller
Controller
여러개의 View 이벤트를 받아, 하나의 데이터를 조작하여,
View를 변화시키는, Dispatcher와 Store는 결국 Controller와 비슷하다
MVC를 Event 기반으로 바꾸어서 이름만 새로 붙였을 뿐이다!
Flux의 의미
이벤트 기반으로 데이터와 뷰를 조작하는 아이디어는 패턴에 대한 지식을 적게 요구한다.
데이터를 한 곳에서 Static하게 관리하는 아이디어는 Preference와 DB를 쓰지 않고도 편하게 데이터를 전달할 수 있도록 한다
Controller가 아니라 데이터를 바라보며 View를 관리하는 관점은 변화를 쉽게 적용하도록 한다.
이벤트 기반
데이터 기반
1
2
1
단점
이벤트를 한번 거쳐야 하는만큼 직관적이지 못하다
가독성이 낮다
1
2
결론
기본적으로 MVC를 지키되,
여러 View와 엮인 Model의 경우에는 Flux를 혼용한다 (ex : Master, Master Stack, 교환방 등)
감사합니다