The idea behind the provider model is to create back-end agnostic code that depends on a provider plugin to connect and and communicate with the main service. Plugins provide communication layer so that the application itself can deal only with idealized data and straight-forward verbal actions. Decoupling the communication layer from the front-end code allows for a cleaner and more easily testable application.
This works especially well when using the notion of a central event bus with font-end components publishing via the bus requests for data and user actions and subscribe to relevant updates. The provider in turn subscribes to the actions it can specifically handle, communicates this to the back-end and then publishes the result on the event bus for any listening components.
There are a few addition gains that make this ideal for debugging, integration and end to end testing. Since the provider is only a subscriber to specific events and not the sole consumer, more than