https://github.com/ReactorKit/ReactorKit

리리엑터 킷은 Flux와 Reactive Programming을 결합 View에서 발생한 액션을 Reactor에서 State로 변경후 데이터 바인딩을 통해 State의 변화를 통해 뷰에서 화면을 갱신하는 구조로 코드를 작성하는 것을 도와줌. 이를통해 테스트용이한 코드를 작성하고, 전체 구조를 Reactorkit으로 바꾸지않고 모듈 단위로 리펙토링할 수 있음, 적은 코드 작성을 통해 앱을 구현 할 수음( 이건아닌듯 )

코드 구조

Untitled

Flux: View → Action → Reactor → State → View의 순환구조로 동작 하도록 하는 React에서 주로 사용하던 개발 패턴으로 보임.

Reactive Programming: 데이터의 변화를 구독하여 화면갱신으로 사용함 Reactorkit에서 rxswift를 사용함.

- 개발패턴 분석

한 화면모듈을 구현하기 위해서 View와 Reactor 두가지를 통해 개발을 진행하게 된다.

View

뷰를 사용하기 위해서는 View프로토콜을 상속해야 하고 View에서는 disposeBag과 reator의 타입을 명시 bind(reactor:)를 통해 reactor에게 Action을 보내고, reactor의 State의 변화를 감지 화면을 갱신하는 역할 storyboard를 사용하는 경우 StoryBoardView를 채택해야 함.

Reactor

Reactor는 UI독립 적인이어야함. 화면에서 발생하는 이벤트를 서비스와 결합해 화면의 State를 갱신하는 역할.

화면의 로직을 담당한다고 보면 될 듯하다. Reactor프로토콜을 채택해야 하며 Action, Mutation, State를 정의해야함. initialState(최초 뷰의 상태 ) 또한 정의해야함.

Action: 화면에서 들어오는 이벤트

Mutation: 이벤트에 대응하는 서비스 로직을 거친후 결과값들

State: 화면에 보여주는 데이터들

이벤트 처리 시퀀스

화면에서 발생한 Event → Action **func mutate(action:Action) → Observable<Mutation>**을 통해 Mutation으로 변환함. mutate() 함수에서 service로직을 호출하고 사이드 이팩트를 발생 시킴. 이과정에서 얻어온 데이터를 Mutation으로 변환