Есть ли лучшая практика для лучшего определения и организации маршрутов в MVC?
Компания, в которой я работаю, ведет очень обширный и сложный сайт электронной торговли с ~ 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()
IEnumerable<Route>
список Route
с для добавления к RouteCollection
.
Но с этим прототипом у нас возникла новая проблема: вместо просмотра списка вызовов route.MapRoute()
, чтобы выяснить, какой контроллер вызывает конкретный URL, мы теперь должны угадать, какой контроллер отвечает за конкретный URL, и проверить его IRoutedController
список маршрутов, чтобы увидеть, действительно ли URL вызывает тот контроллер, который мы догадались. Не так сложно, но иногда это занимает столько же времени, сколько изучение нашего списка 75+ Route
s в Global.asax.cs.
Это лучшее решение?
Есть ли какое-нибудь хорошее решение?
Должны ли мы просто добавлять маршруты в Global.asax.cs; мы должны дать прототипу зеленый свет; или мы должны сделать что-то еще? (Предположим, что вы не можете реорганизовать существующие URL-адреса маршрутов, чтобы сделать их более логичными.)