1

编写以下案例的最佳实践是什么:

我们有一个控制器,它根据用户采取的路径,采取不同的行动。例如:

如果用户选择路径 /path1/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 路由

相反,这应该在执行控制器的方法之前执行。与您的控制器无关。您可以看到的最明显的模式可能是前端控制器

至于具体的实现,最简单的方法是创建一个Router实例,它Request根据用户的输入(包括 URL 本身和其他参数,如POST值)生成一个对象。您从该Request对象中提取控制器的名称和方法。

此外,将所述Request实例作为 的参数提供是合理的action,以便此操作可以清楚地访问来自用户输入的其他值。

您可能还会发现这很有用:DispatcherServlet 的 Spring Framework 文档

于 2012-12-15T15:11:33.077 回答
0

在实际路由中使用散列比使用 Switch 语句更干净、更快捷,尤其是当您有许多路由并且您只测试字符串相等性时。

于 2012-12-15T17:02:46.103 回答