我有一个应用程序,我开始将事件流表示为RxJava Observable。事件的要求和结构在开始时很简单,RxJava附带的操作符非常适合所需的简单转换。
然而,从那时起,需求和业务逻辑变得更加复杂。需要以非常特殊的方式关联事件,并且Observable上的操作非常友好和友好,之后变成了大量的代码。我必须编写自定义变换器,我使用其他自定义变压器等等。
Altough我确信代码在不使用现有RxJava的情况下至少会变得复杂,我关注以下事项:
我相信我的问题必须有一个明确的答案: RxJava是否应该解决复杂的问题,如果是这样,以什么方式?这些解决方案应该如何测试?现在我只能提出需要将代码组织成单独单元的解决方案,这样我就不会有数百行连续代码摆弄groupyBy,flatMap,scan和combineLatest运算符彼此嵌套了几层深。
感谢您的回答!
(顺便说一句,我非常喜欢反应式编程,因为事实证明它在某些问题上更直接,特别是它帮助我避免直接处理可变状态。也许可测试性是我最担心的。我通常在kotlin中使用依赖注入并为所有内容编写单独的单元测试,但我怀疑这是RxJava中的最佳解决方案)
答案 0 :(得分:2)
RxJava就像任何好工具一样:当正确使用它时,它做得很好。随着需求的增长,您可以让代码增长,并且您的优秀工具可以使用#34;开始让你失望。
RxJava对于解决需要跨线程边界进行复杂协调的问题非常有用。运营商允许您进入"牧群"您的数据到达所需的线程并确保线程安全的操作,在大多数情况下,不需要过度使用synchronized
和volatile
构造。
重构您的代码 如果某些事情难以进行单元测试,请重构它。如果某些内容难以理解,请对其进行重构和/或重新设计。
反应式是学到的东西。不要因为这很困难,或者因为其他人可能不理解它而不再支持它。反应式风格最重要的功能是能够推理代码,甚至跨越线程边界,以及时间和空间本身:)。