2010-09-17 99 views
3

如何在MVC中最好地定义和组织路由是否有最佳做法?管理路由/ Global.asax可维护性

我工作的公司运行一个非常广泛,复杂的电子商务网站,每天约有600,000个独立访客。

这里的问题:在我们的Global.asax.cs中,我们已经有了在大约75路由定义这个巨大的名单我们RegisterRoutes()

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

有没有更好的方式来定义比其他航线在Global.asax.cs中有这个巨大的列表?

因为我们有一群开发人员,其中一半是无能,我不能回去重构这些路线,可能需要花费几分钟的时间才能找出控制器负责提供URL的视图。

我该怎么办?

一位开发商忙了建立一个原型,使我们能够做到这一点在我们的Global.asax.cs:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Include(new RootController()); 
    routes.Include(new AccountController()); 
    routes.Include(new HelpController()); 
    routes.Include(new SearchController()); 
    // etc., for each controller 
} 

在这个原型,Include()是一个扩展方法和所有的控制器从IRoutedController,它提供了继承Include() an IEnumerable<Route>Route s的列表添加到RouteCollection

但有了这个原型,我们有一个新的问题:不是翻翻的route.MapRoute()通话清单,发现哪个控制器特定的URL所调用,我们现在必须猜测哪个控制器负责特定的URL,并检查其IRoutedController查看路由列表是否实际调用了我们猜测的Controller。不那么难,但有时只要在Global.asax.cs中查看我们的75+ Route s列表即可。

这是一个更好的解决方案吗?

是否有任何好的解决方案?

我们应该不断地向Global.asax.cs添加路由;我们应该让原型成为绿灯;还是我们应该做点别的? (假设您不能重构现有的路由URL以使它们更加合理)。

+3

你说“他们中的一半是迟缓的。”那另一半呢? – Larsenal 2010-09-17 02:51:06

回答

1

我将外部路由信息存储在xml文件或数据库中,并将其加载到global.asax中。我可以添加额外的列/属性,这将有示例url被路由,以便我可以快速搜索它。更不用说,我可以在不重建项目的情况下更新路线信息(当然,如果有新的控制器,视图等,那么他们需要打包成一个新的dll)。

2

对不起,但你在说什么? :P

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

这种单一的路由条目有效​​,您可以调用任何参数的任何控制器的任何操作方法。


这是一个更好的解决办法?

可能不是。

有没有什么好的解决方案?

是。但是你需要分享更多的路线来确保。

我们应该不断地向Global.asax.cs添加路由;我们应该让原型成为绿灯;还是我们应该做点别的?

否,否和是。您需要分享相当数量的路线才能更好地了解情况。

(假设你不能重构现有航线URL以使其更符合逻辑。)

但你可以确保新的适合在默认路由,所以这个问题不会继续增长,即{controller}/{action}