A controller can send commands to the model to update the model’s state (e.g., editing a document). It can also send commands to its associated view to change the view’s presentation of the model (e.g., by scrolling through a document).
A model stores data that is retrieved to the controller and displayed in the view. Whenever there is a change to the data it is updated by the controller.
A view requests information from the controller. The controller fetches it from the model and passes it to the view that the view uses to generate an output representation to the user.