Ribs는 우버에서 만든 croess-platform 아키텍처 프레임워크입니다.
Ribs 아키텍처는 다음과 같은 이점을 제공합니다.
iOS 및 안드로이드의 아키텍처 공유
iOS와 안드로이드 팀이 비즈니스 논리 코드를 교차 검토할 수 있습니다.
테스트 가능성 및 분리
Class는 Unit Test가 쉬워야합니다.
개별 RIB클래스에는 별도의 책임이 있는데
routing, business, view logic, creation 등이 있습니다.
대부분의 RIB로직은 자식 RIB 로직과 분리되어(decoupled) 있습니다.
따라서 RIB 클래스는 독립적으로 테스트하고 추론하기 쉽습니다.
개발 생산성을 위한 툴링
RIB는 코드 생성, 메모리 누수 감지, 정적 분석 및 런타임 통합과 관련된 IDE 툴링과 함께 제공됩니다.
확장 가능한 아키텍처
동일한 코드베이스와 RIB를 사용하는 애플리케이션에서 수백 명의 엔지니어와 협업이 가능하다는 것이 입증되었습니다.
인터랙터가 수행하는 모든 작업은 라이프사이클에 국한되어야 합니다.
인터랙터가 활성화된 경우에만 비즈니스 로직을 실행할 수 있도록 구축되었기에
인터랙터가 비활성화되면 구독이 계속 실행되어 비즈니스 논리 또는 UI 상태가 원치 않는 업데이트되는 시나리오를 방지할 수 있습니다.
Router는 Interactor를 수신, 출력을
하위 RIB를 부착(attaching) 및 분리(detaching)하는 것으로 변환합니다.
Router는 세 가지 이유로 존재합니다.
Humble Objects 로서 하위 Interactor를 mock하거나
그 존재에 대해 신경 쓸 필요없이 복잡한 Interactor 로직을 쉽게 테스트 할 수 있습니다.
상위 Interactor와 하위 Interactor 사이에 추가 추상화 계층을 생성합니다.
Router에는 interactor가 구현할 수 있는 단순하고 반복적인 라우팅 로직이 포함되어 있습니다.
Builder의 책임은 RIB의 각 클래스 구성요소
각 Ribs children의 Builder를 인스턴스화 하는 것입니다.
Builder는 프로젝트에서 사용된 DI 시스템을 인식해야하는 RIB의 유일한 부분입니다.
다른 Builder를 구현하면 다른 DI 메커니즘을 사용하여 프로젝트에서 나머지 RIB코드를 재사용 할 수 있습니다.
비즈니스 모델을 ViewModel 또는 그 반대로 변환합니다.
ViewModel의 테스트를 용이하게 만들 수 있습니다.
Presenter가 생략되면 ViewModel변환은 View(Controller) 또는 Interactor의 책임이 됩니다.
View는 UI를 빌드하고 업데이트합니다.
여기에는 UI component 인스턴스화 및 배치, 사용자 상호 작용 처리, UI components 채우기 및 애니메이션이 포함됩니다.
View는 단지 정보를 표시할 뿐입니다.
일반적으로 Unit Test가 필요한 코드는 포함되어 있지 않습니다.
Component는 RIB dependency를 관리하는데 사용됩니다.
RIB을 구성하는 다른 Unit을 인스턴스화하여 Builder를 지원합니다.
https://github.com/uber/RIBs
https://zeddios.tistory.com/937