Você não disse que tipo de lógica está compartilhando. Em resumo, essa lógica do controlador é uma função auxiliar? Os dois métodos de lidar com isso em uma linguagem orientada a objetos são herança e composição. A herança faz sentido se houver uma ação compartilhada entre os dois controladores. A composição faz sentido o resto do tempo. O exemplo do uso de herança está na minha resposta original abaixo do divisor.
Não é incomum ter uma classe de utilitário ou auxiliar, dependendo da sua estrutura. Por exemplo, nas estruturas da web Java e C #, você pode ter um pacote / namespace para utilitários. No Ruby on Rails, você pode estar aproveitando a Helper
classe que compartilha lógica entre controladores e visualizações. Basicamente, ficaria assim:
// NOTE: group similar functions
static class LoginUtility
{
static bool IsLoggedIn(Request request) { /* ... */ }
}
Como alternativa, você pode criar uma classe que você instancia. A chave para o padrão de classe estática acima é tornar suas funções funções puras. Em outras palavras, você passa em qualquer estado em que ele precise executar seu trabalho, e a função não faz referência a nenhum outro estado estático no sistema.
Em qualquer um dos casos, você o acessaria em cada um de seus controladores como este:
void MyAction()
{
if (LoginUtiltiy.IsLoggedIn(Request))
{
// Do something ...
}
}
Resposta original
Você não disse qual era a sua plataforma, pois isso pode afetar a resposta. Supondo que seja uma linguagem orientada a objetos, a abordagem mais comum é criar uma classe base que os dois controladores estendem. Por exemplo, no Ruby on Rails, você pode ter:
class BaseController < ApplicationController
def my_special_function
# ...
end
end
class Controller1 < BaseController
# ...
end
class Controller2 < BaseController
# ...
end
Você pode traduzir a ideia para outros idiomas também. A mesma abordagem funcionará para o ASP.NET MVC, Apache Wicket, Grails ou qualquer outra estrutura da Web orientada a objetos. Se sua linguagem não é orientada a objetos, isso realmente depende de como a estrutura é projetada quanto à melhor abordagem.