Какая логика может пойти во взгляде?(MVC) - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть сценарий, в котором у меня есть вид, который может отображаться в режиме A или режиме B в зависимости от характеристик пользователя. Допустим, пользователь A может видеть режим просмотра A, а пользователь B может видеть режим просмотра B.есть два отдельных представления для этого сценария, в которых логика хранится в контроллере (хотя представления в основном похожи, только режим просмотра B скрывает некоторые поля), или можно использовать View Logic, например

@if (Usertype == "A"){ then display XYZ } else { display ABC }

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

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

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

0 голосов
/ 17 декабря 2018

Я предпочитаю иметь как можно меньше кода в представлениях.Я стараюсь держать код в представлениях для циклического перебора коллекций из модели и выбора свойств из модели.Зачем?Хотя и не невозможно, тестирование всей логики в представлении является сложным и редко поддерживается в актуальном состоянии.Каждое утверждение является потенциальным YSOD в представлении.

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

0 голосов
/ 17 декабря 2018

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

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