RxMVVM-DataCenter is iOS app architecture to remove dependencies among ViewControllers. If you see the result which is made by using RxMVVM-DataCenter at https://github.com/skyfe79/RxGitSearch. You can know there is no dependencies among ViewControllers and how to use Rx techniques.
RxMVVM-DataCenter 은 어떻게 하면 의존성을 제거할 수 있을까에 대한 고민에서 시작된 프로젝트입니다. RxGitSearch라는 작은 예제를 만들어서 ViewController간에 의존성을 제거하였고 Rx를 사용하여 앱을 유연하게 변화에 빠르게 대응할 수 있도록 구현하였습니다.
29. 왜?
• Model-View-Controller간에 dependency가 너무 강하
기 때문이다.
• Model은 변경이 자주 일어 나지 않는다. -> 재사용가능
• View도 변경이 자주 일어 나지 않는다. -> 재사용가능
• Controller는 변경이 자주 일어 난다 -> 그러나 Massive
View Controller로 재사용 불가능
36. 좋은점
V VM M
1. 테스트 코드를 작성하기 편하다.
2. VM과 M은 변경이 자주 일어 나지 않아 재사용성이 높다
3. V는 변경이 자주 일어나지만 Dependency와 책임이 약해
쉽게 변경 가능하다.
4. Rx와 찰떡궁합니다.
37. V
1. 뷰를 꾸미고 레이아웃 하는 것만 책임지면 된다.
2. 모델이 등장하지 않는다.
1. 단, iOS의 TableView나 CollectionView에서는
모델이 등장할 수 있다.
왜? DataSource가 model을 cell-view로 전환해주는
Adapter이기 때문이다.
41. 1.Control Flow -> Data Flow
2.Asynchronous operations and
event/data streams
42.
43. Rx-MVVM
V VM M
Binding Observable
VM은 비동기 데이터 스트림으로 M을 다룬다.
바인딩을 통해 M이 변경되거나 VM의 액션이 일어나면
V가 자동으로 변경되도록 한다.
즉, 프로그래머는 V에서 데이터, 이벤트 흐름에 대해 플로우를
설계하면 그만이다!
48. Android
• 화면 네비게이션이 기본으로 IPC에 기반을 두고 있음
• 다른 액티비티의 인스턴스를 현재 액티비티에서 생성할
수 없음
• Intent를 통해서 입력 데이터를 전달함
• 결과를 onActivityResult로 받음
• 액티비티간에 dependency가 아주 약함
49. iOS
• iOS는 한 프로세스 안에 여러 VC를 가지고 있음
• 같은 메모리를 공유하기 때문에 현재 VC에서 다른 VC의
인스턴스를 생성할 있고 멤버 함수도 호출할 수 있음
• 화면 네비게이션을 위해 VC간에 알아야 하는게 필수임
• 결과는 Delegate로 받아서 델리게이트의 존재도 알아야
함
• 아주 강력한 Dependency가 생김!
53. Segue
• VC간의 네비게이션을 Segue를 통해 VC가 서로 몰라도 네비게이션
이 되게 하자.
• performSegue(“push-segue”)
• 그러나 데이터 주입(Injection)을 해야 할 때 강력한 디펜던시가 생김
• prepareSegue()
• destinationViewController가 무엇인지 알아야 함
• destinationViewController의 인스턴스를 사용해야 함