asp.net MVC: передать строку запроса в виде строки или отдельные параметры? - PullRequest
3 голосов
/ 21 июля 2009

В asp.net MVC у меня есть поисковое действие в моем контроллере, и я пытаюсь решить, должен ли я передать запрос в мой репозиторий в виде строки

public ActionResult Search(string query)
{
    return View(_repository.ListPeople(query));
}

или как отдельные параметры:

public ActionResult Search(string FirstName, string LastName, System.Nullable<byte> Education)
{
    return View(_repository.ListPeople(FirstName, LastName, Education));
}

Множество примеров, которые я видел в Интернете, используют метод строки запроса, но для меня он не кажется "безопасным", хотя с ним немного легче иметь дело, когда у вас есть набор параметров для передачи. Есть ли общее мнение относительно лучшего способа сделать это?

Ответы [ 3 ]

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

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

При этом я также предпочитаю иметь интерфейс контроллеров с четко определенными сервисами, так как, по моему опыту, это помогает поддерживать контроллеры легче. Я пытаюсь позволить службе выступать в качестве шлюза к хранилищу, хотя это не требуется. Есть две вещи, которые я передам в хранилище (или, скорее, сервис), в зависимости от цели вызова - либо набор параметров, как вы даете во втором примере, либо как созданный объект домена если применимо.

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

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

Информация здесь и здесь

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

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

...