Мне очень нравится среда ASP.NET MVC 3.Или, по крайней мере, это несравненно лучше, чем пытаться дурачиться с ASP.NET 3.5 или 4.0.Тем не менее, я просто очень смущен чем-то.Почему они решили указать маршруты со строками?
IOW, мне сказали указать мои маршруты следующим образом (например):
... new { controller = "Products", action = "List", id = UrlParameter.Optional }
Этот маршрут соответствует ProductsController.List ()метод.Допустим, у меня настроение рефакторинга, и я хочу переименовать мой ProductsController в InventoryController.После использования выбранного инструмента переименования я открыл Global.aspx, прошёл все мои маршруты и изменил все эти глупые строки на «Inventory».Вы можете ответить, что я могу найти и заменить ... но давай!Я чувствую, что это такой ответ последнего поколения.
Я люблю рефакторинг своего кода, поскольку я лучше понимаю свой домен.Я не хочу использовать глупые (я говорю глупые, потому что они не имеют значения для компилятора) строки, чтобы ссылаться на символьные / семантические конструкции кода, которые точно соответствуют именам типов и методов, которые в конечном итоге сохраняются в таблице символов.Какой смысл?Зачем вообще беспокоиться о типах?Давайте просто вернемся к написанию сценариев с использованием ассоциативных массивов и словарей для представления нашей доменной модели ... мне кажется, что преимущество строгой типизации значительно уменьшается, когда мы смешиваем ее со ссылками на строки.
Серьезно, хотяВариант будет отражением.Будет ли удар по производительности для этого?Я полагаю, что для получения моего ProductsController фреймворк MVC должен использовать отражение в этой строке «Products», так что ... Но вам также придется удалить часть «Controller» имени типа следующим образом:
= typeof(ProductsController).Name.Replace("Controller", string.Empty)
Я мог бы использовать следующую вспомогательную функцию, чтобы сделать ее немного СУХОЙ:
public string GetControllerName(Type controller)
{
return controller.Name.Replace("Controller", string.Empty);
}
Сравнительный анализ в порядке, если это единственный способ избежать этих строк ... Тем не менее, это глупо,Я использую отражение над типом, чтобы получить строку, которую MVC собирается использовать вместе с отражением, чтобы получить тип, который у меня изначально был.
Есть ли какая-то причина, по которой не следует использовать следующий (логично?) шаг, и свойства контроллера и действия ожидают Типы и Делегаты непосредственно?Разве это не будет просто чище и яснее?Насколько я понимаю, фундаментальным аспектом MVC является соглашение о конфигурации, но маршрутизация с этими строками мне кажется лишь скрытой формой конфигурации.
Есть ли другой способ обойти это?Я все еще новичок в MVC.Я читал, что мы можем заменить эти компоненты маршрутизации.Кто-нибудь знает, возможно ли сделать то, о чем я говорю?И если это невозможно, хорошо ... я здесь один?Я что-то пропустил?Некая главная причина, почему важно, чтобы эти маршруты задавались немыми строками?Если нет, то может ли это быть чем-то, за что можно лоббировать?
Я один ненавижу это, когда строки используются таким образом?Я все еще думаю, что C # нужно что-то похожее на символы Ruby и ключевые слова Lisp, которые могли бы использовать наши инструменты рефакторинга.Вроде как «строковые перечисления», где имя значения перечисления является одновременно значением.
Я понимаю, что части этого вопроса субъективны, но я также ищу объективный ответ о том, можно ли напрямую использовать типы и делегаты для указания этих конфигураций маршрутизации.
СпасибоДжеромейерс