iOS | RIBs – 1. RIBs 에 대해서.


https://github.com/uber/RIBs
https://github.com/uber/RIBs/wiki


About RIBs


RIBs 이름
Router
Interactor (Business logic)
Builder (View)


RIBs 특징
– 모바일 어플리케이션을 위해 설계된 아키텍쳐.
– iOS, Android 양쪽에서 적용 가능한 아키텍쳐.
– View, 비지니즈별로 RIB class를 정의가능하다 = 독립적 테스트 작성이 간편.
– 코드 생성, 메모리 누수 감지 등의 IDE 툴이 제공된다 = 생산성 향상
MVC, MVP, MVI, MVVM, VIPER 는 아키텍처이고, RIBs는 프레임워크이다.


RIB의 클래스 분류


1. Router
– Interactor를 듣고, 하위 RIB로 연결하거거나 분리하는 것으로 결과값을 변환시킨다.
– 이유
1) Child Interactor의 mock도 다른 것들을 신경쓰지 않아도 되는 Humber Object (겸손한 개체) 역할을 한다.
2) 상위 Interactor과 하위 Interactor 사이의 추상화된 레이어를 생성한다.
– 추상화된 레이어는 서로의 동기식 커뮤니케이션을 어렵게 하고, RIB간의 직접적인 커뮤니케이션 대신 Reactive communication 을 촉진시킨다.
3) Router 에는 간단하고 반복적인 Routing logic 이 포함되어 있다. 혹시라도 없다면 Interactor로 구현될 수 있다.
– boilerplate code 를 작성하면 RIB에서 제공하는 핵심 비즈니스 로직에보다 집중하고 소형화 할 수 있다.

2. Interactor
– 비지니스 로직.
– Rx 구독 수행, 상태 변경, 저장할 데이터를 결정.
– 하위 항목으로 연결할 다른 RIB 을 결정.
– Interactor에 의해 수행되는 모든 작업은 해당 생명 주기로 제한되어야 한다.
– Interactor가 활성화되어 있을 때에만 비즈니스 로직이 실행되도록.
– 비활성화되었을 때 구독이 계속 발생되어 비즈니스 로직 또는 UI 업데이트가 발생.

3. Builder
– Builder는 RIB 의 모든 구성요소 class와 자식 RIB builder 를 인스턴스화 해야한다.
– Builder 에서 class 생성 논리를 분리하면 iOS 에서 Mockability를 지원한다. 그래도 나머지 RIB 코드는 DI 구현의 세부사항에는 영향이 없다.
– Builder는 프로젝트에 사용된 DI 시스템을 인식하는 유일한 부분이다.
– 다른 Builder를 구현하면, 그 다른 DI 메커니즘을 사용하여 프로젝트에서 나머지 RIB 코드를 재사용할 수 있다.

4. Presenter (Optional)
– Business model 을 View model 로 변환하거나 반대로 변환하는 stateless class.
– 굳이 필요없을 때는 Presenter 대신에 View(View Controller) 나 Intoractor 가 대신 구현한다.

5. View, ViewController(Optional)
– UI 의 build, update 담당.
– UI 는 가능한한 보여주기만 아는 바보로 만들어야 한다. 테스트가 필요한 코드는 없어야 한다.

6. Component
RIB dependency를 관리.
– RIB 를 구성하는 다른 unit 들을 설치하는 것들과 함께 Builder를 돕는다.
– 부모 RIB 의 컴포넌트는 자식 RIB의 Builder 에 주입된다. 자식 RIB가 부모 RIB 의 dependency 에 접근할 수 있도록 한다.



State 관리
– RIB tree로 표시.

RIB 간의 통신
– Interactor가 비지니스 로직 결정을 내릴 때, 다른 RIB 에 알리고 데이터를 어떻게 전송해야 할까 🤔
– 통신이 자식 RIB로 가는 하향식인 경우 : Rx stream 또는 build 메소드.
– RIB tree 에서 상위 RIB Interactor로 올라가는 경우 :  listener interface 를 통해 통신
– Listener interface가 부모가 자식의 Rx Stream 에 가입하는 것보다 좋은 이유
– Memory leak 방지.
–  parents to be written, tested and maintained without knowledge of which children are attached, and reduces the amount of ceremony needed to attach/detach a child RIB.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중