Model-View-Controller is an architectural framework based on the decoupling of the 3 major categories:
The coupling can be done in various way using any available behavioral patterns. Its diagram is often shown as follows:
There are many ways to implement MVC without specifically defining the behaviors between the 3 main categories. MVC can interacts with each others either actively or passively depending on which behavioral pattern used for their interactions.
Active model uses an observer behavioral pattern to drive the executions (event-driven). This is also known as reactive programming for MVC architecture patterns. Active approach's controller is mainly about event handling while most of the events are delegated to Model, interacting with Views to display the necessary output.
Passive model uses naive pattern, template-method pattern, strategy pattern, etc. to sequentially execute the executions. This is the common and basic use of MVC approach. Passive approach's controller is mainly acts as the coordinator between the events, model, and views. There are heated debates where Model-View interactions should be forbidden for cleaner decoupling results, making it easier to maintain.