Vous n'avez pas dit quel genre de logique vous partagez. En bref, est-ce une logique de contrôleur ou une fonction d'assistance? Les deux méthodes pour gérer cela dans un langage orienté objet sont l'héritage et la composition. L'héritage a du sens s'il y a une action partagée entre les deux contrôleurs. La composition a du sens le reste du temps. L'exemple de l'utilisation de l'héritage réside dans ma réponse originale sous le diviseur.
Il n'est pas rare d'avoir une classe utilitaire ou une classe d'assistance selon votre framework. Par exemple, dans les frameworks Web Java et C #, vous pouvez avoir un package / espace de noms pour les utilitaires. Dans Ruby on Rails, vous profitez peut-être de la Helper
classe qui partage la logique entre les contrôleurs et les vues. Fondamentalement, cela ressemblerait à ceci:
// NOTE: group similar functions
static class LoginUtility
{
static bool IsLoggedIn(Request request) { /* ... */ }
}
Alternativement, vous pouvez en faire une classe que vous instanciez. La clé du modèle de classe statique ci-dessus est de faire de vos fonctions des fonctions pures. En d'autres termes, vous passez dans n'importe quel état dont il a besoin pour faire son travail, et la fonction ne fait référence à aucun autre état statique du système.
Dans les deux cas, vous y accéderez dans chacun de vos contrôleurs comme ceci:
void MyAction()
{
if (LoginUtiltiy.IsLoggedIn(Request))
{
// Do something ...
}
}
Réponse originale
Vous n'avez pas dit quelle était votre plateforme, car cela peut affecter la réponse. En supposant qu'il s'agit d'un langage orienté objet, l'approche la plus courante consiste à créer une classe de base que les deux contrôleurs étendent. Par exemple, dans Ruby on Rails, vous pourriez avoir:
class BaseController < ApplicationController
def my_special_function
# ...
end
end
class Controller1 < BaseController
# ...
end
class Controller2 < BaseController
# ...
end
Vous pouvez également traduire l'idée dans d'autres langues. La même approche fonctionnera pour ASP.NET MVC, Apache Wicket, Grails ou à peu près tout autre framework Web orienté objet. Si votre langage n'est pas orienté objet, alors cela dépend vraiment de la façon dont le framework est conçu quant à la meilleure approche.