So I have the feeling that one can forget object oriented programming when reactive streams are in use, due to the lack of the async-await syntax (because with the call chaining, the state has to be explicitly passed between blocking and non blocking substeps), nonetheless I also think that dataflow programming alone is not an appropriate basis for abstraction in most applications. E.g. I believe that complex business logic that is not sequential requires different concepts.

Please disprove me if I'm wrong about oop (with an example) or direct me to what is commonly used in parallel with reactive streams. (I guess it's FP.)


I would say the closest "Paradigm equivalent" is Functional Programming, perhaps even lazy functional programming (or FP that is lazily evaluated). It's obviously not an exact mapping, but it's close.

A great example of this is Haskell. Learning Haskell was one of the best things I could have done for myself because when RxJava and the likes came around, it already looked very familiar to me, and it was a lot easier for me to pick up than for some of my colleagues. It's also a lazily evaluated language, which lines up with Rx's default behavior pretty well.

One Key-Word to consider is "Purity", specifically, functional purity. In that, the output of a pure function is only impacted by the inputs of that function. Same inputs, same output, always. This can be applied to a lot of Reactive Stream operators, such as Map, Filter, etc. at least in terms of best practices.

What you don't get "out of the box" with simple pure functions in a language like Haskell is any notion of async. However, this is easily reconciled in those languages with different monads. (An Rx Observable is a monad, plus a whole lot of other things, if you squint hard enough).


Not the answer you're looking for? Browse other questions tagged or ask your own question.