MVC belongs to Design Pattern.Model -- Data abstraction View -- Data Representation Control -- Data manipulation.The main purpose of MVC is to decouple the data abstract with data representation.If you are familiar with Observer/Observable Pattern (See Design Pattern, GOF), MVC can been seen as two way Observer/Observable pattern.Let me give you a example.Supporse you want to analyze Account problem. You can have a Account Model which represent Account data. Also, you have different Account View, including Form View, Sheet View, Graphic View, etc. To establish the connection between Model and Views, you design a AccountController as a mediator.Thus, you have a single Model which only care about data storage, and you have multiple views and a single AccountController. Designing like this, you have the ability to add as many new views as you can, or to replace existing AccountController without impact Account Model and existing views provided all the class comply to well-defined interfaces.AccountController acts as Observable on which Model and Views will dynamically attach.When one of views is changed, it will dispatch change event to the controller which delegate the change to Model. Model change its internal state to comply to this change and then dispatch change event to the controller which delegate the change to all interesting Views. Thus, All the views can update itself to comply to change.Maybe you think this is quite complicated, but this can decouple the correlation between data abstraction, display and behaviours. A most famous words I have heart is "Introducing indirect layer can resolve any type of computer problem".
View -- Data Representation
Control -- Data manipulation.The main purpose of MVC is to decouple the data abstract with data representation.If you are familiar with Observer/Observable Pattern (See Design Pattern, GOF), MVC can been seen as two way Observer/Observable pattern.Let me give you a example.Supporse you want to analyze Account problem. You can have a Account Model which represent Account data. Also, you have different Account View, including Form View, Sheet View, Graphic View, etc. To establish the connection between Model and Views, you design a AccountController as a mediator.Thus, you have a single Model which only care about data storage, and you have multiple views and a single AccountController. Designing like this, you have the ability to add as many new views as you can, or to replace existing AccountController without impact Account Model and existing views provided all the class comply to well-defined interfaces.AccountController acts as Observable on which Model and Views will dynamically attach.When one of views is changed, it will dispatch change event to the controller which delegate the change to Model. Model change its internal state to comply to this change and then dispatch change event to the controller which delegate the change to all interesting Views. Thus, All the views can update itself to comply to change.Maybe you think this is quite complicated, but this can decouple the correlation between data abstraction, display and behaviours. A most famous words I have heart is "Introducing indirect layer can resolve any type of computer problem".