The 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 make it difficult to reuse it. I'll 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 as it goes down the scroll bar of the page, more posts are loaded dynamically.
Let's name our MVC components here:
View
As we are developing a web application, we can say that our View , ie 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 our 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 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
scroll
vent event of the browser.
- Our Controller will then take the information needed to make an HTTP request for our service. (Probably via ajax, which is a feature offered by most browsers to execute HTTP requests without reloading the page.)
- Our Model will receive the request, apply business logic and return to our Controller .
Our Controller will update our View with Model information.
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 would we have to change in our current application?
Most desktops or mobiles offer features to use the HTTP protocol, this means that we can communicate with our model from any platform, ie it remains unchanged. But not all of them offer a Javascript interpreter or HTML renderer. So let's have to adapt the View and Controller to the new platforms / technologies.
This is a type of application that does not reuse Controller because the platform with which the user will interact changes.
I hope I have helped.