Практики шаблонов MVC (asp.net mvc) - генерация URL-адресов в действии вместо представления - PullRequest
1 голос
/ 30 июня 2009

Представьте себе сценарий, у вас есть страница со списком, которая представляет собой объединение нескольких сущностей на вашем сайте (например, страницы поиска). Вы собираете все сущности вашего сайта в действии и отображаете их все в общий посмотреть тип модели ..

Псевдо:

from articles, posts, projects
orderby rating
select top 50 as 'SearchResult'

Мой класс результатов поиска может выглядеть следующим образом:

SearchResult { Title, Snippet, Rating }

В этом сценарии представление не будет иметь контекста того, что каждый результат «представляет», так как он может генерировать URL для получения более подробной информации, должен ли результат быть классифицирован?

SearchResult { Title, Snippet, Rating, ResultType }
where ResultType is { Article, Post, Project } enum

Это сработало бы, потребовалось бы, чтобы представление открыло связь перечисления с действием контроллера.

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

Похоже, что лучшим сценарием было бы создание URL-адреса "более подробной информации" в действии, где он имеет контекст каждой сущности и отображение действия / данных.

Это нормально для контроллеров / действий для генерации URL, разве они не должны оставаться агностиками?

Заранее спасибо.

1 Ответ

3 голосов
/ 30 июня 2009

Я думаю, что передача URL с контроллера для просмотра в порядке. Например, если вы разрабатываете поисковую систему в Интернете (новый конкурент Google :)), для просмотра нет другого способа определить, где был найден документ с заданным названием, фрагментом и рейтингом.

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