When it comes to the MVC pattern, I have always thought of the controller as the pivot. That is, it is the one that receives all actions that the user wishes to perform and it then decides which model and view to use to complete the user requested action. (My experience with MVC is through Asp.net and so I am thinking of how routes are used to pick the correct controller which then loads the model and selects and creates the appropriate view).
Is there a pivot in the MVVM pattern? Is the view the pivot in that the user interacts with the pivot which then can result in different model being loaded and presented to the user using the appropriate VM?
Also, where does the logic that normally sits in the controller in MVC sit in the MVVM pattern?
MVVM is more distributed than MVC. Views and view models are typically bound at design time, which means that the VM does not perform the same function as an MVC controller. It is more of a pure coordinator than a controller–a good view model generally has relatively little decision logic.
The whole idea behind MVVM is to isolate the graphical elements of a view from its programmatic elements. It similarities to MVC are really only superficial. In MVC, a controller acts as an executive, the real intelligence behind an application. In MVVM, the VM acts only as a programmatic abstraction of a view, and the intelligence is distributed throughout the application.
MVVM components act in a collaborative, distributed manner, which tends to eliminate the monolithic concentration that permeates some MVC apps. It takes a bit of getting used to but it works very well. Think of an MVVM app as a mechanical swiss watch–what is the pivot point of a watch? There really isn’t one. A watch is a collection of autonomous components that work together to perform a task. There really isn’t a ‘pivot point’ than masterminds the operation.