0

すべて、私のアプリケーション設計では、Controllerクラスの一部のアクションは、呼び出されるたびに最初に同じメソッドを呼び出します。コードスニペットは次のようになります。確認してください。ありがとうございます。

public class Controller1 : Controller
    {

        public ActionResult Action1()
        {
            FunctionA(); //This function must be called firstly.This function is defined somewhere. 
            return View("a1");
        }

        public ActionResult Action2()
        {
            FunctionA(); 
            return View("a2");
        }

    }

public class Controller2 : Controller
    {

        public ActionResult Action3()
        {
            FunctionA(); 
            return View("a3");
        }

        public ActionResult Action4()
        {
            FunctionB(); 
            return View("a4");
        }

    }

現在の場合 Action1、、、Action2inController1Action3inController2は同じものを呼び出しますFunctionA()。DRY理論に基づいて、ベースコントローラーまたはメソッドを定義する方が良いです。Asp.netMVC4でそれを作成する方法がわかりません。助けてください。ありがとう。

4

2 に答える 2

0

それほど単純ではありません。単にコードを共有しているだけでは、必ずしもその機能を実装する共通の基本クラスが必要であるとは限りません。あなたはあなたのインターフェースを動かすためのコードの詳細について考えています。

詳細を知らずに質問に答えることはできませんが、それらがすべて使用しているコードが1つの場所にある限り、あなたは正しい方向に向かっています。

于 2012-11-07T12:37:14.560 に答える
0

基本的に答えはあなたのデザインに依存するので、あなただけがこの質問に答えることができます。

FunctionAメソッドがそのコントローラーに固有である場合は、基本クラスを導入できます。ただし、代わりにヘルパークラスを使用することも、拡張メソッド(十分に汎用的である場合)を使用してDRYアーキテクチャを実現することもできます。

アクションでそれを呼び出す方法に関して、アクションを実行するに実行する必要がある場合は、各アクションを装飾するために使用できるカスタムActionFilterAttributeを導入することをお勧めします。

public class Controller1 : Controller
{
    [FunctionAAttribute]
    public ActionResult Action1()
    {
        return View("a1");
    }

    [FunctionAAttribute]
    public ActionResult Action2()
    {
        return View("a2");
    }
}

または、その特定のコントローラーでのすべてのアクションの前に実行する必要がある場合は、コントローラーを装飾するだけです。

[FunctionAAttribute]
public class Controller1 : Controller
{
    public ActionResult Action1()
    {
        return View("a1");
    }

    ...
}
于 2012-11-07T12:48:09.477 に答える