"I'm sorry Dave, I'm afraid I can't do that..." - said HAL 9000 in the 2001: A Space Odyssey... ;-)
I don't know Rx and I don't use it. Therefore comparing these both products would be very hard. It's not so bad if I evaporate. All what is left would be a bunch of classes communicating with each other mostly using messages. MCM is a software pattern, just
like MVVM, MVC and others and the way you use it depends on you.
Please refer to the
example for better understanding.
There is a container. It contains components. Some components are workers (Component 1) other updates UI (Component 2).
If you need logging functionality, you add Component 3 to the container. After it receives the HelloResponseMessage it stores the message content to the log file.
If you need "Work in progress" reporting, you add Component 4 to the container. After it receives the HelloRequestMessage, it sets its IsWorking property to true. After receiving the HelloResponseMessage IsWorking is set to false. Each change to IsWorking
is reported by sending the IsWorkingChangedMessage.
A Component 5 waits for the IsWorkingChangedMessage and updates UI according to it.
This structure can grow and grow. New components can be added, old ones can be removed. Components can refer to each other directly just like Services in ServiceProvider or can communicate indirectly using messages.
In the Hello World example only Component 1 is using commands for asynchronous operation. All other components work synchronously - after receiving a message they update their state on the same thread (i.e. Component 2).