reactive programming vs observer pattern