如何在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以使它们更加合理)。
你说“他们中的一半是迟缓的。”那另一半呢? – Larsenal 2010-09-17 02:51:06