回答:
あなたはそれがあなたが共有しているのがどんな種類の論理であるかについては言いませんでした。つまり、このコントローラロジックまたはヘルパー関数ですか?オブジェクト指向言語でこれに対処する2つの方法は、継承と構成です。2つのコントローラー間で共有アクションがある場合、継承は意味があります。残りの部分は構図が理にかなっています。継承を使用する例は、分割線の下の私の元の答えにあります。
フレームワークに応じて、ユーティリティクラスまたはヘルパークラスを持つことは珍しくありません。たとえば、JavaおよびC#のWebフレームワークでは、ユーティリティ用のパッケージ/名前空間がある場合があります。Ruby on Railsでは、Helper
コントローラーとビューの間でロジックを共有するクラスを利用している可能性があります。基本的には、次のようになります。
// NOTE: group similar functions
static class LoginUtility
{
static bool IsLoggedIn(Request request) { /* ... */ }
}
または、インスタンス化するクラスにすることもできます。上記の静的クラスパターンの鍵は、関数を純粋な関数にすることです。つまり、ジョブを実行するために必要なすべての状態を渡し、関数はシステム内の他の静的状態を参照しません。
どちらの場合でも、各コントローラーで次のようにアクセスします。
void MyAction()
{
if (LoginUtiltiy.IsLoggedIn(Request))
{
// Do something ...
}
}
元の回答
それが答えに影響を与える可能性があるので、あなたはあなたのプラットフォームが何であったかを言いませんでした。 それがオブジェクト指向言語であると仮定すると、最も一般的なアプローチは、両方のコントローラーが拡張する基本クラスを作成することです。たとえば、Ruby on Railsでは次のようになります。
class BaseController < ApplicationController
def my_special_function
# ...
end
end
class Controller1 < BaseController
# ...
end
class Controller2 < BaseController
# ...
end
アイデアを他の言語に翻訳することもできます。同じアプローチがASP.NET MVC、Apache Wicket、Grails、または他のほぼすべてのオブジェクト指向のWebフレームワークで機能します。言語がオブジェクト指向でない場合は、フレームワークがどのように設計されているかによって、最善のアプローチが決まるかどうかに依存します。