1

Controller クラスに handlePathChange() という仮想関数があります。
現在の URL をチェックし、適切なビューをディスパッチする必要があります。
これまでのコードは次のとおりです。

void Controller::handlePathChange()
{
    if ( app->internalPathMatches(basePath) )
    {
        string path = app->internalPathNextPart(basePath);

        if ( path.empty() ) // If it's empty it is known that the index of the controller should show up
            index();
        // else if ( path == ?? ) each controller has it's own routes
        //   call_some_unknown_function();
    }
}

これをどのように一般化できますか?
私は2つのオプションについて考えていました:

  1. 派生クラス内の正しい関数への正しいパスに一致する、dispatch() という純粋仮想関数を呼び出します。基本的に同じコードを何度も書くことになるため、このソリューションは DRY に違反しています。
  2. std::function のハッシュ マップを作成しますが、URL の一部がパラメーターである場合、ビューは見つかりません。したがって、そのオプションは十分ではありません。

何か案は?

4

1 に答える 1

1

あなたの投稿では C++ の例を使用していることは承知していますが、C# を読むことを気にしない場合は、Scott Guthrie によるこの記事で、ASP.NET MVC フレームワークがルーティングを実装する方法の概要を説明しています。

http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

その記事はとても参考になると思います。非常に単純化された方法では、オプション#2に似ていますが、常にパラメーターをチェックします。パラメータが指定されていない場合、同じルーティング ルールが使用されますが、「デフォルト」値が指定され、リクエストが正しいビューに送信されます。その戦略は、パラメーターが指定されている場合に適切なビューが見つからないという問題を回避します。

お役に立てれば。

于 2009-12-29T02:17:48.940 に答える