我有一个应用程序,在该应用程序中,我开始将事件流表示为可观察的RxJava。事件的需求和结构在开始时很简单,RxJava附带的操作符非常适合于所需的简单转换。
然而,从那时起,需求和业务逻辑变得更加复杂。需要以非常特殊的方式将事件关联起来,而对可观察到的事件的操作在以前是如此友好和友好的操作变成了大量的代码块。我不得不写自定义变压器,我使用从其他定制变压器,等等。
尽管我确信,如果不使用RxJava,代码至少会变得和现在一样复杂,但我担心的是以下几点:
我认为,我的问题必须有一个明确的答案:应该是RxJava来处理复杂的问题,如果是的话,以什么方式?如何测试这些解决方案?现在只能想出需要将代码组织成不同单元的解决方案,这样我就不会有数百行与groupyBy、flatMap、scan和combineLatest操作符相互嵌套在一起的连续代码。
谢谢你的回答!
(顺便说一句,我非常喜欢反应式编程,因为它在某些问题上更直接,尤其是在它帮助我避免直接处理可变状态的情况下。也许我最担心的是可测试性。我通常在kotlin中使用依赖项注入,并为所有内容编写单独的单元测试,但我怀疑这是RxJava中最好的解决方案)
发布于 2017-12-14 16:21:52
RxJava就像任何一个好工具:如果使用得当,它就会做得很好。您已经让代码随着需求的增长而增长,而您的“好工具”正开始使您不堪重负。
RxJava对于解决需要跨越线程边界的复杂协调的问题非常有用。运算符允许您将数据“成群”到所需的线程上,并确保线程安全操作,而无需在大多数情况下过度使用synchronized
和volatile
构造。
重构您的代码如果有什么东西很难单元测试,重构它。如果某件事情很难理解,重构和/或重新设计它。
反应式是一门学问。不要因为它是困难的,或者因为其他人可能不理解它而放弃它。反应性样式提供给您的最重要功能是对代码进行推理的能力,甚至跨越线程边界,以及时间和空间本身:)。
https://stackoverflow.com/questions/47817432
复制相似问题