Управление маршрутами / ремонтопригодность Global.asax - PullRequest
3 голосов
/ 17 сентября 2010

Есть ли лучшая практика для лучшего определения и организации маршрутов в 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-адреса маршрутов, чтобы сделать их более логичными.)

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Извините, но о чем вы говорите? : P

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

Эта единственная запись маршрута позволяет эффективно вызывать любой метод действия любого контроллера с любыми параметрами.


Это лучшее решение?

Вероятно, нет.

Есть ли хорошее решение?

Да. Но вы должны поделиться своими маршрутами, чтобы быть уверенным.

Должны ли мы просто продолжать добавлять маршруты в Global.asax.cs; мы должны дать прототипу зеленый свет; или мы должны сделать что-то еще?

Нет, Нет и Да. Вам нужно поделиться приличным количеством маршрутов, чтобы лучше понять ситуацию.

(Предположим, что нельзя реорганизовать существующие URL-адреса маршрутов, чтобы сделать их более логичными.)

Но вы можете убедиться, что новые маршруты соответствуют маршруту по умолчанию, поэтому проблема не будет расти, т. Е. {Controller} / {action}

1 голос
/ 17 сентября 2010

Я бы сохранил информацию о маршруте извне в xml-файле или базе данных и загрузил бы ее в global.asax. Я могу добавить дополнительный столбец / атрибут, который будет содержать пример URL-адреса, чтобы я мог быстро найти его. Не говоря уже о том, что я могу обновлять информацию о маршруте без перестройки проекта (конечно, если появятся новые контроллеры, представления и т. Д., Тогда их нужно будет упаковать в новую dll).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...