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();
    }
}

我如何概括这一点?
我在考虑两个选择:

  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 回答