MVC is an #decoupling idiom that separates the model from the view and the controller that manage the view. In this page, the model is defined as the abstract data model, for it to be a variable or #data-structure, that represent the target object which can be from multiple form of sources. View is defines as the user interface, either GUI, TUI or CLI, to the model, which could be nested. In other way, it is the interpretation of the model. Controller is the way or mean to handle the view and sometime could supply the model with new data.
Note: Model should be easy to be parsed and read.
Note: Controller can be a mean to prevent overwhelming information due to the viewers (filtered models) to increase the usability#.
Each model may have multiple viewers, and each viewer may interact with multiple models. This is a many-to-many relationship.
With the combination of the concept #Publish/Subscribe Protocol, we can treat model as the event, view as the subscriber to the events and controller as the publisher of those events. Since the controller has the ability to provide new data to the model, there could be the case it is, too, a publisher to the model.
Although in the hierarchy, the view is higher than the model, they can be the models for the higher-level objects.
A theoretical better alternative to the MVC model is the Blackboard System#