agera vs rxjava

Post on 06-Jan-2017

996 Views

Category:

Internet

1 Downloads

Preview:

Click to see full reader

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.

top related