1

次のケースを作成するためのベストプラクティスは何でしょうか。

ユーザーがたどるパスに基づいて、さまざまなアクションを実行するコントローラーがあります。例えば:

ユーザーがパス/path1/ helloを選択すると、helloと表示されます。ユーザーが/path1/ bye?name = "Philipp"を選択すると、sayGoodBye()などが呼び出されます。

コントローラー内に単純なswitchステートメントを記述しましたが、IMOは効率的ではありません。パスが一般的に文字列であることを考えると、これを実装するための最良の方法は何ですか。

private void takeAction()
    {
    switch (path[1])
    {
    case "hello":
        //sayHello();
        break;
    case "bye":
        //sayBye();
        break;
    case "case3":
        //Blah();
        break;
             ...
    }
}

更新:私のコンテキストでは、パスは動的に生成されます。つまり、そこに特定のページはありません。パスが/Amir/の場合、Amirは動的に生成されます。したがって、Mark Leighton Fisherが説明したように、それらをハッシュに入れるのはかなり困難です。

4

2 に答える 2

1

あなたのコントローラーは追加の責任を負っています:URLルーティング

代わりに、これはコントローラーのメソッドが実行される前に実行する必要があります。あなたのコントローラーとは何の関係もありません。あなたが見ることができる最も明白なパターンはフロントコントローラーである可能性があります。

特定の実装に関しては、最も簡単な方法は、ユーザーの入力(URL自体と値などの他のパラメーターの両方)からオブジェクトRouterを生成するインスタンスを作成することです。このオブジェクトからコントローラーの名前とメソッドの両方を抽出します。RequestPOSTRequest

さらに、このアクションがユーザーの入力から他の値に明確にアクセスできるように、Requestのパラメーターとして上記のインスタンスを提供することは合理的です。action

これも有益かもしれません:DispatcherServletのSpringFrameworkドキュメント

于 2012-12-15T15:11:33.077 に答える
0

特に多くのルートがあり、文字列の等価性のみをテストしている場合は、実際のルーティングに Switch ステートメントよりもハッシュを使用する方がクリーンで高速です。

于 2012-12-15T17:02:46.103 に答える