2010-09-17 36 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}