3

DoThisStepFirst()多くの方法で繰り返さないようにするのに役立つデザインパターンはありますか?

class Program
{
    static void Main(string[] args)
    {
        Method1();
        Method2();
        MethodN();
    }

    private static void DoThisStepFirst()
    {
        // Implementation
    }

    private static void Method1()
    {
        DoThisStepFirst();
        // Implementation
    }

    private static void Method2()
    {
        DoThisStepFirst();
        // Implementation
    }

    // {...}

    private static void MethodN()
    {
        DoThisStepFirst();
        // Implementation
    }
}

編集1:これは不自然な例です。
私の実際の実装には、パラメーターを使用したメソッドシグネチャと、各メソッドの重要な操作が含まれています。

編集2:

  • @Marc Gravellは、アスペクト指向プログラミングを提案しました。はい、それはここで私を助けるかもしれません。
  • また、Chain-of-Responsibilityパターンがここでも役立つかもしれないと考えています。

@チャーリー・マーティンはこのプログラムについてもっと知りたがっていました。これが私が実際にやろうとしていることです。

  • ' m 'コントローラーおよび' n 'コントローラーメソッドのASP.NETMVC2アプリケーションに対して実行するテストハーネスを設定しようとしています。
  • MVCアプリケーションはSessionStateと緊密に結合されています。さまざまな理由で、SessionStateをモックすることはできません。
    • そのため、メソッド内で、DoThisStepFirst()SessionStateを初期化します。
    • そして、SessionStateを初期化した後、指定されたメソッドに進みたいと思います(そのため、「Chain of Responsibility」デザインパターンを探しているのではないかと思います)。
4

6 に答える 6

4

それがテスト ハーネスの場合、単体テスト フレームワークにはTestFixtureSetupメソッドが必要です。テストが実行される前に最初に実行されます。

NUnit の場合:

[TestFixtureSetUp]
public void Setup()
{

}

MSTest の場合:

[TestInitialize()]
public void Startup()
{
    //Do setup here
}
于 2011-02-26T18:15:31.827 に答える
3

DoThisStepFirst()常に呼び出してから渡されたアクションを実行するメソッドがあると思います。

    private static void DoSomething(Action doSomethingElse)
    {
        DoThisStepFirst();
        doSomethingElse();
    }
于 2011-02-26T17:46:28.730 に答える
3
private static void MethodCommon(Func f)
{
    DoThisStepFirst();
    f();
}

private static void Method1()
{
    MethodCommon(() => 
        doSomething();
    );
}
于 2011-02-26T17:49:05.580 に答える
1

正直なところ、pgramについてもっと知らずにこれに答える方法はありません。「DoThisStepFirst」はある種の初期化のようです。考えたくなる

  DoThisStepFirst();
  Method1(); // and so on

などですが、各メソッドで初期化が必要なようです。それで、質問は「なぜ各メソッドがその状態でピドリングしているので、再初期化を続ける必要があるのですか?」です。

別の方向に進むと、各ステップの前に実際に初期化を実行する必要があるプログラムを想像できます。これは同じ初期化であり、その場合はかなりうまく行き詰まります。

于 2011-02-26T17:47:39.917 に答える
0

コードをDoThisStepFirst()に入れて、コンストラクターに入れてはどうでしょうか。それらすべてがそこで開始するために実行する必要がある場合、操作はそこに入る可能性があります。メソッドが何かを実行する前にリセットする必要がある状態/動作をリセットしない限り。

于 2011-02-26T17:46:36.213 に答える
0

いいえ、通常はありません。多分あなたはあなたが達成しようとしていることについていくつかの詳細を提供することができますか?

于 2011-02-26T17:46:48.257 に答える