MetaZen provides software architects and designers with a way to defer some of the more important architectural decisions for a project.

Curiously, by deferring these decisions, we make them less important, and as a result the truly important decisions receive the proper attention they deserve.

This next series of articles are about one of these decisions… are you going to utilize reactive components in your design?

In order to explore the answer to this question, first one must be able to answer another question:

What is Reactive?

My favorite implementation of a reactive library is the ReactiveX implementation.

Although the project was originally started by Microsoft, don't let that influence your opinion. Many companies and projects such as Couchbase, Trello, GitHub, Netflix, etc use ReactiveX, and there are tons of implementations in many different languages, so more than likely no matter the language you're using, there's probably a library you can use.

If you're familiar with Angular, you'll probably be familiar with RxJS, but don't be too sure of the depth and breadth of your knowledge because Angular's use of RxJS is minimal… almost to the point where I'm not sure the Angular developers truly grok Reactive.

Hopefully this next series of articles will help you fully understand what it is, how to use it, and more importantly, why you would want to use it.

From the front page of ReactiveX:

ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming

I would change functional programming to declarative programming, but otherwise it sounds like a good description.

Digging further, from the Gang of Four design patterns book:

Observer Define a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.

There are a couple of inconsistencies, such as functional programming does not have state, and I would argue that within ReactiveX, it's sometimes better to look at it in terms of a value changing, not specifically state.

When I talk about Reactive, I'm talking about the combination of generic observables, iterators, and declarative programming design patterns, but sometimes I will mistakenly use the names Reactive, ReactiveX and RxJS interchangeably, with the former being the generic pattern and the next two being increasingly more specific implementations.