Тип безопасности в строковых аргументов


Мой конкретный вопрос о ASP.NET MVC но я уверен, что ответы могут быть применены снаружи ASP.NET.

Как вы справляетесь с функциями, которые принимают строковые аргументы, но по-прежнему требуют безопасности типов?

В ASP.NET, расширение метода Html.ActionLink имеет два аргумента типа string: string linkText, string actionName. Первый аргумент-это текст, который можно загрузить из ресурса, а второй аргумент-это имя метода, существующего в коде.

Одним из вариантов было бы создать класса с постоянным строк, поэтому вместо того, чтобы писать

 Html.ActionLink("Blah blah", "MyAction");

Можно было бы написать:

Html.ActionLine("Blah blah", StrongType.MyAction);

Где MyAction - строка const в классе, называемом StrongType. Однако это становится проблемой, когда увеличивается число методов и других объектов, которые могут быть переданы в качестве аргументов.

Второй вариант-каким-то образом загрузить имя функции с помощью отражения, но это кажется слишком дорогим.

Есть ли лучший способ сделать это? Как вы убедитесь, что у вас нет опечатки в строковых аргументах вроде тех, что упоминались ранее?
2 3

2 ответа:

Вы можете использовать метод расширения ActionLink, который позволяет избежать использования этих волшебных строк.

<%= Html.ActionLink<BlahController>(c => c.MyAction(), "Blah blah");

Вам нужно будет сослаться на Microsoft.Web.Mvc, который является частью ASP.NET фьючерсы на MVC 3 и доступны по адресу http://aspnet.codeplex.com/releases/view/58781 .

Я думаю, что ответ Лестера подходит для этого конкретного случая. Но в более общей ситуации вам действительно нужно определить константы и использовать их. Да, это боль, но вы можете установить Много констант за то время, которое вы сэкономите, не выслеживая ошибку, вызванную аргументом "желтый", когда вы имели в виду "желтый".

Теперь, если вы проектируете вызываемый метод, не делайте его строковым аргументом, когда у вас действительно есть набор постоянных значений, он будет принимать. Сделайте это перечислением.