Это правильный MVC способ сделать это? - PullRequest
0 голосов
/ 07 июня 2011

Я все еще хорошо разбираюсь в MVC и стараюсь оставаться максимально верным шаблону.У меня есть Модель со свойством Статус, среди других.Контроллер вызывает представление и передает соответствующую модель.В представлении, если Status = "Incomplete", мне нужно, чтобы оно показывало Incomplete <a href="blah">Complete registration</a>, если Status = "В листе ожидания", мне нужно, чтобы оно показывало On Waiting List: Position @Model.WaitListPosition, и т. Д., И т. Д.

Логика, чтобы решить, чтопоказывать на основе статуса будет в представлении, поскольку оно определяет, как оно представляется пользователю, верно?Или строка должна быть встроена в контроллер и передана в представление?

Ответы [ 4 ]

2 голосов
/ 07 июня 2011

Первый лучше. Контроллер должен быть максимально тонким. Пусть представление решит, как отобразить переданные ему данные.

0 голосов
/ 07 июня 2011

Разделение проблем диктует, что контроллер не должен знать о том, как вы отображаете данные, только вызов модели, необходимый для извлечения данных, необходимых представлению, которое будет включать поле «Состояние». Представление касается того, где логика должна указывать, как преобразовывать данные для отображения.

Некоторые фреймворки ( Ruby on Rails , единственный из известных мне) предоставляют способы извлечения логики преобразования данных из макета представления. В случае RoR их называют помощниками . Например, у вас есть этот вспомогательный метод с именем format_status, который принимает Status в качестве параметра и возвращает ожидаемый HTML-рендеринг. Обратите внимание, что это позволяет вам легко писать модульные тесты для этого метода без необходимости (более) сложных тестов веб-просмотра.

0 голосов
/ 07 июня 2011

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

0 голосов
/ 07 июня 2011

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

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

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