agera vs rxjava
TRANSCRIPT
Agera vs RxJava(안드로이드양 Reactive 를 꿈꾸는가?)
TossLab, GDE 정승욱
Agera
Reactive Android
Observable, Supplier, Receiver, Updatable 개념이 있음
Observable : 데이터 감시 대상을 지정하는 객체
Supplier : 데이터를 생산함
Receiver : 변경된 데이터를 받음
Updatable : 데이터를 전달받는 객체
Repository
Observable 과 Supplier 를 상속
내부에 데이터를 가지고 있음
데이터가 변경되면(Observable) Stream 의 시작함 (Supplier)
Simple Repository
Repositories.mutableRepository(0)Repositories.repository(0)
데이터의 소유와 전달을 주목적으로 하는 간단한 기능의 Repository
Result
Agera 에서 새로 생긴 결과 값을 저장하기 위한 객체
public boolean isPresent()public boolean isAbsent()public T get()public boolean succeeded()public boolean failed()
Complex Repository
데이터 흐름 과정에서 생성, 변경 에러 처리등을 할 수 있도록 해주는 Repository
Builder 형태로 Stream 순서를 정의 후 사용 할 수 있음
Complex Repository 알아보기
초기 값 선언
Complex Repository 알아보기
데이터 변화를 감지할 대상 지정
Complex Repository 알아보기
최종 Consume 단계에서 즉시처리 or Delay 처리 정의
Complex Repository 알아보기
다음 로직을 어떤 쓰레드로 처리할지 정의
Complex Repository 알아보기
데이터 처리 방식 정의
Complex Repository 알아보기
수행 정의 완료
Repository Compile 시 데이터 제어 함수
이전 데이터에 상관없이 새로운 데이터 시작
Repository Compile 시 데이터 제어 함수
이전 데이터를 기반으로 데이터 변형
Repository Compile 시 데이터 제어 함수
이전 데이터를 기반으로 새로운 데이터를 생성해서 합성한다
Repository Compile 시 데이터 제어 함수
데이터를 새로운 Receiver 로 전달함
Repository Compile 시 데이터 제어 함수
데이터를 계속 처리할지 말지를 정의
Repository Compile 시 데이터 제어 함수
● attemptXXX○ 결과 값을 Result<T> 로 받는 함수 (success/fail 여부를 포함한 객체)○ attemptXXX().orXXX 가 항상 붙는다
● thenXXX, thenAttemptXXX○ Stream 을 최종적으로 Consume 함
Complex Repository 다시 보기
repository 내부 데이터가 변경되면 Stream 시작
Complex Repository 다시 보기
dispatch-update 는 Delay 없이 수행하도록 호출
Complex Repository 다시 보기
백그라운드 쓰레드로 수행 시작!
Complex Repository 다시 보기
repository 로부터 데이터를 받아옴
Complex Repository 다시 보기
서버 통신해서 데이터 받아옴. 실패하면 Result.failure() 전달
Complex Repository 다시 보기
failure 면 중단
Complex Repository 다시 보기
마지막으로 데이터 변경 한번더
Complex Repository 다시 보기
thenTransform 에서 반환된 데이터를 저장하는 Repository
Complex Repository 다시 보기
resultRepository 가 변경되면 처리할 것 정의
Complex Repository 다시 보기
스트림의 시작. repository 의 데이터 변경함
RxJava 로 변경하면?
Agera
1. Receiver + Observable2. goTo, onUpdatePerLoop3. getFrom4. transfrom5. mergeIn6. sendTo(xxx)7. check8. thenXXX9. xxx.accept
1. BehaviorSubject + distinctUntilChange2. observerOn3. concatMap4. map5. combinelatest6. xxx.onNext7. filter8. map, ..etc + subscribe9. xxx.onNext
RxJava
결론
Agera 는 Architecture 라이브러리를 지향한다.
하지만 아직 Agera 는 Sliver Bullet 이 아니다.
참고 자료
Ageragithub : https://github.com/google/ageracodlab : https://codelabs.developers.google.com/codelabs/android-agera/
Agera vs RxJava Samplegithub : https://github.com/ZeroBrain/RxJava-Agera-Sample
Agera 에 대한 RxJava 커미터의 의견http://akarnokd.blogspot.kr/2016/04/google-agera-vs-reactivex.htmltl;dr - Google makes wheel again.