To Controller is usually dependent on the language/technology used by View and Model, so if you change the way the two communicate with the Controller, will hinder a reuse of it. I will try to make it clearer with a simple example:
Let’s say we have a web application similar to Twitter or Facebook, where we list posts from one or more people related to a user. And according to that it goes down the scroll bar of the page, more posts are loaded dynamically.
We will name here our MVC components:
View
As we are in developing a web application, we can say that our View, i.e., the components with which the user can interact, is our markup (HTML).
Controller
Again, because we are working with a web application, the component that will intermediate between our View and our Model will be a browser-supported scripting language, most likely Javascript.
Model
Our Model is a service written in any server language, with which we communicate via HTTP. This service is responsible for the business logic of the application. In our case it will return us the posts of people related to the user who is using our application.
Now that we have our application designed and we know the responsibilities of the technologies, we see clearly what will happen when the user uses the scroll bar:
- Our Controller will be activated by the event of
scroll
browser.
- Our Controller will then get the information needed to make an HTTP request for our service. (Probably via ajax, which is a feature offered by most browsers for executing HTTP requests without reloading the page.)
- Our Model will receive the request, apply the business logic and return to our Controller.
- Our Controller will update our View with the information of Model.
Now imagine that we have to make an application with the same behavior, using the same service (Model) only now for Desktop, or Mobile. Which components we would have to change in our current application?
Most Desktops or Mobiles offer features to use the HTTP protocol, meaning that we can communicate with our model of any platform, ie it remains unchanged. But not all offer a Javascript interpreter or HTML reader. So we’ll have to adapt the View and Controller for new platforms/technologies.
This is a type of application that it is common not to reuse Controller because the platform with which the user will interact changes.
I hope I’ve helped.