Что такое «логика представления» и насколько она приемлема во взглядах?

13

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

<form>
// a lot of htnl goes here 
@if (editing)
{
  // some more fields shown in edit mode
}
@if(!editing)
{
 // some stuff shown in create mode
}

Я всегда старался не ставить никаких ifутверждений в свои представления, но на этот раз я не вижу других вариантов, кроме копирования огромной части HTML в двух местах, чего я не хочу делать. Это правильная «логика представления» и есть ли другие варианты?

Георги Георгиев
источник

Ответы:

17

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

Является ли выбор полей для режима редактирования / создания правильным использованием логики представления, является спорным. Частично это зависит от вида и количества настроек.
Например, если разница заключается только в смене заголовка или в одном из режимов отображается одно или два поля в режиме «только для чтения», то может быть правильным выбрать один вид и выбирать режимы динамически.
С другой стороны, моя первая реакция состояла в том, что это должны быть два разных представления, в которых общие части импортируются из третьего файла (аналогично тому, как часто верхний и нижний колонтитулы добавляются в представления).

Барт ван Инген Шенау
источник
12

Кажется совершенно разумным использовать оператор @if или два в представлении Razor.
Они добавили @if в Razor - он предназначен для использования.

Ваш код может быть сокращен до одного @if:

@if (editing)
{
  // some more fields shown in edit mode
}
else
{
 // some stuff shown in create mode
}

Альтернативой является использование трех представлений:

  • Частичное представление, содержащее общий HTML
  • Создать представление (вызывает частичное представление)
  • Изменить вид (также вызывает частичный вид)

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

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html


источник