如何告诉控制器要调用哪个视图?

时间:2009-12-28 23:22:14

标签: c++ model-view-controller wt

我的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的一部分是参数,则将找不到该视图。所以这个选项还不够好。
  3. 有什么想法吗?

1 个答案:

答案 0 :(得分: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,但始终检查参数。如果未提供该参数,则它使用相同的路由规则,但提供“默认”值并将请求发送到正确的视图。该策略避免了您提到的问题,如果指定了参数,则无法找到相应的视图。

希望这有帮助。