C'est assez étrange, bien que la réponse dépende du langage / framework que vous utilisez, car différents langages / frameworks ont différentes approches de MVC.
En général, vous n'utiliserez pas un contrôleur d'un autre car:
Les contrôleurs retournent généralement un résultat d'un type destiné à être utilisé par le framework MVC. Ce résultat contient beaucoup d'informations dont vous, en tant qu'appelant, n'avez pas besoin (comme le nom de la vue), et ne facilite pas toujours l'accès aux informations qui pourraient vous intéresser (dans votre cas, le modèle, si je suppose bien).
Les contrôleurs ne sont pas faciles à initialiser à partir du code métier, car ils ont souvent besoin d'une certaine quantité d'informations sur la requête HTTP et le contexte. Toutes ces informations devraient être transmises par le framework MVC.
Plus important encore, si vous avez besoin d'un ensemble de résultats de recherche dans deux contrôleurs, un qui affiche les résultats à l'utilisateur final, un autre qui génère des statistiques, placez simplement la logique de recherche dans votre couche métier (à laquelle elle appartient en premier lieu, soit dit en passant), et gardez vos contrôleurs aussi petits que possible.
Le rôle d'un contrôleur, dans MVC, est d'orchestrer le processus:
- Obtenez les informations pertinentes de la demande,
- Déléguer aux valideurs la tâche de valider / assainir l'entrée,
- Appelez les méthodes pertinentes de la couche métier,
- Donnez au framework MVC le modèle résultant et la vue.
Le rôle d'un contrôleur n'est pas de gérer la logique métier.
Une fois le code déplacé vers la couche métier, vous pouvez alors fournir une interface de recherche qui peut être réutilisée de manière claire et simple, contrairement à un contrôleur utilisé par un autre.