2017-12-14 13 views
1

나는 RxJava Observable로서 이벤트 스트림을 표현하기 시작한 어플리케이션을 가지고있다. 이벤트의 요구 사항과 구조는 처음에는 간단 했으므로 RxJava와 함께 제공된 운영자는 필요한 단순 변환에 매우 적합했습니다.복잡한 문제를 해결하기 위해 반응 형 프로그래밍 (RxJava)을 사용해야합니까?

그러나 그 이후로 요구 사항과 비즈니스 논리는 훨씬 더 복잡해졌습니다. 매우 특별한 방법으로 사건을 연관시킬 필요성이 생겼고 Observable에서 친절하고 친절한 작업은 무거운 코드 조각이되었습니다. 다른 커 스톰 변압기 등에서 사용하는 커스텀 변압기를 작성해야했습니다.

나는 코드가 지금처럼 RxJava를 사용하지 않고 최소한 훨씬 복잡하게했을 것이라고 확신 입력해도, 나는 다음과 같은 것들에 대해 걱정 :

  1. 모든 반응성 스타일로 작성된 것입니다, 어떤 나는 대부분의 신참자들에게 다가 가기가 어렵다고 생각하며, 이것이 프로젝트에 대한 더 많은 공헌에 대해 제기 한 한계에 대해 걱정하고 있습니다.
  2. 내 친구 (프로젝트에서 일하고있는 친구)는 RxJava를 훨씬 더 간단하게 사용해야한다는 것을 여러 번 언급했습니다. 그는 자신이 보았던 RxJava 기반 프로젝트는 서로 사용자 정의 변환기를 중첩하지 않고 간단한 연산자를 사용한다고 말했다.
  3. 코드를 테스트하는 것이 어려워졌습니다. 작은 트랜스포머를 모의하지 않는다면, 나는 모든 것을 함께 테스트해야만한다. 그렇지 않으면 그것을 사용하는 트랜스포머의 생성자 인수로 사용해야한다. 어떤 방법으로, 만약 그렇다면 이 RxJava이 복잡한 문제를 해결하기 위해 가정, 그리고 :

내 질문에 대한 명확한 답이있을 가지고 있다고 생각합니다? 이러한 솔루션을 어떻게 테스트해야합니까? 지금 당장은 코드를 별도의 단위로 구성해야하는 솔루션을 생각해 낼 수 있었기 때문에 groupyBy, flatMap, scan 및 combineLatest 연산자가 서로 중첩되어있는 수백 개의 연속 코드 줄이 필요하지 않았습니다.

답장을 보내 주셔서 감사합니다.

(btw, 나는 반응 형 프로그래밍이 상당히 좋아 졌는데, 특정 문제에서 더 직관적 인 것으로 판명되었는데, 특히 그것이 가변적 인 상태를 직접 처리하는 것을 피하는 곳에서였다. 아마도 테스트 가능성이 내가 가장 걱정하는 것일 수도있다. 일반적으로 kotlin의 의존성 주입을 사용하고 모든 것에 대해 별도의 단위 테스트를 작성합니다. 그러나 이것이 RxJava에서 가장 좋은 솔루션이라고 생각하지 않습니다.)

답변

1

RxJava는 올바르게 사용하면 올바르게 작동합니다. 요구 사항이 증가함에 따라 코드가 커지도록하고, "좋은 도구"가 무게를 재기 시작합니다.

RxJava는 스레드 경계를 넘어 복잡한 조정이 필요한 문제를 해결하는 데 매우 유용합니다. 연산자를 사용하면 대부분의 경우 synchronizedvolatile 구문을 과도하게 사용하지 않고도 원하는 스레드로 데이터를 "모으고"스레드 안전 작업을 보장 할 수 있습니다.

리 팩터 코드 단위 테스트가 어려울 경우 리팩터링하십시오. 이해가 어려운 것이 있으면 리팩터링하거나 재 설계하십시오.

반응 스타일은 배운 것입니다. 그것이 어렵거나 다른 사람들이 그것을 이해할 수 없기 때문에 그것을 뒤로하지 마십시오.리 액티브 스타일이 제공하는 가장 중요한 기능은 코드에 대해 추론 할 수 있으며 심지어는 스레드 경계를 넘을 수도 있고 시간과 공간 자체를 추론 할 수도 있습니다.

+0

감사합니다. Bob Dalgleish! 필자는 코드를 리팩토링했고 마침내 길이와 예상되는 복잡성이 객체 지향 객체와 비슷했던 지점에 도달했습니다. 그러나 나는 더 이상 그것을 향상시킬 수 없었고, 우리는 시간이 없으므로 oop 접근법으로 끝 맺었습니다. 아직도 많은 것을 배웠고 다시 사용할 기회가 있습니다. –

+0

나는 이것이 훌륭한 도구라는 것에 당신에게 동의한다. 여러 스레드 간의 동기화 및 조정은이 문제의 일부가 아니므로 RxJava를 사용하지 않은 또 다른 이유입니다. –