Должен ли я сделать действия контроллера ASP.NET MVC виртуальными?

Файл -> Новый проект для проектов ASP.NET MVC, используемых для создания контроллеров с виртуальными действиями. Я не уверен, прекратилось ли это с MVC 2 или MVC 3, но это больше не лучшая практика?


person kenwarner    schedule 04.06.2011    source источник
comment
Интересный вопрос. Я не заметил изменения, но теперь, когда вы упомянули об этом, это звучит смутно знакомо.   -  person Jedidja    schedule 04.06.2011


Ответы (4)


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

person archil    schedule 04.06.2011
comment
да, я тоже это понял. Хотя мне было интересно. Следует покопаться в особенностях виртуальных - person tugberk; 05.06.2011
comment
Грубо говоря, создание виртуальных методов действий не является особенностью asp.net mvc. Это больше функция языка С#, которую использует T4MVC. - person archil; 05.06.2011
comment
это было оно. T4MVC добавил виртуальное ключевое слово к любому действию, в котором его еще не было. это также сделало мои контроллеры частичными классами - person kenwarner; 05.06.2011

текущая документация для ASP.NET MVC 3. не показывает виртуальные методы. Я не совсем уверен, что даст вам их virtual, поскольку я никогда не делил контроллеры на подклассы для переопределения действий.

person Jedidja    schedule 04.06.2011

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

person Colin Mackay    schedule 04.06.2011
comment
Интересный; вы получаете TestController : RealController и переопределяете методы действия? Мне любопытно, как будет работать насмешка над методами над насмешкой над зависимостями. Есть ли у вас какие-либо сообщения в блоге об этом подходе? - person Jedidja; 05.06.2011
comment
Зачем вам издеваться над подклассами? - person Roy Dictus; 05.06.2011

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

person Sprague    schedule 19.02.2016