Это хорошая практика, чтобы явно указать тип ActionResult, возвращаемый контроллером в ASP.NET MVC - PullRequest
8 голосов
/ 09 июля 2009

Я уже некоторое время пользуюсь ASP.NET MVC и, похоже, постоянно возвращаю вещи, отличные от ActionResult, из моих контроллеров. Я, очевидно, возвращаю ViewResults, а также JSonResults, а также пару пользовательских результатов, которые мы создали в своем доме.

Мне интересно, если вместо того, чтобы объявить методы моего контроллера, такие как:

public ActionResult Index()

Я должен начать объявлять их как

public ViewResult Index()

или

public JsonResult Search()

если я всегда знаю , что действие Index на моем контроллере всегда будет возвращать ViewResult, или действие Search на моем контроллере всегда будет возвращать JsonResult?

РЕДАКТИРОВАТЬ: просто чтобы прояснить, я говорю конкретно о ситуациях, когда я всегда хочу, чтобы был возвращен определенный тип ActionResult.

Ответы [ 3 ]

6 голосов
/ 09 июля 2009

Я голосую "за" по двум причинам.

  1. Вы явно заявляете, что ожидаете от метода, и компилятор поймает любую попытку сделать иначе. Нет необходимости в модульном тесте, который выполняет Assert (результат - ViewResult).

  2. Вы должны приводить результат к ожидаемому типу в своих тестах при проверке любых свойств, уникальных для этого типа результата (например, проверка свойства Url объекта RedirectResult). Простое объявление тестовой переменной как var устраняет любую хрупкость, возникающую при смене типов.

2 голосов
/ 09 июля 2009

Объявляя более конкретный тип возвращаемого значения, вы получаете немного больше проверки типа компилятора, которую теперь не нужно охватывать в модульных тестах.

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

1 голос
/ 09 июля 2009

Я бы оставил это как общий ActionResult. Если вы получите конкретный результат и измените его позже, некоторые, если не все, ваши модульные тесты необходимо будет переписать, чтобы учесть это изменение. Это сделает ваши юнит-тесты более хрупкими, чем они должны быть.

РЕДАКТИРОВАТЬ : кроме того, оставляя его как ActionResult, вы позволяете себе возможность возвращать различные результаты на основе вашей логики действий. Например, обычный поток вашего метода может возвращать RedirectResult, но у вас могут быть пути ошибок, которые возвращают ViewResult или HttpUnauthorizedResult. Если вы наберете свой метод более строго, чем нужно изначально, вам может понадобиться излишний рефакторинг его и ваших тестов, когда вы добавите альтернативные результаты позже.

Суть в том, что я не вижу реальных преимуществ и, по крайней мере, пары недостатков.

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