O que é "lógica de apresentação" e quanto é aceitável nas visualizações?

13

No meu aplicativo da web, tenho que fornecer um formulário para criação e edição. Os formulários para criação e edição têm pequenas diferenças, então estou pensando em fazer algo assim na minha opinião:

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

Eu sempre tentei não colocar nenhuma ifdeclaração em meus pontos de vista, mas desta vez não vejo outra opção, exceto copiar uma grande parte do HTML em dois locais, o que não quero fazer. Essa é uma “lógica de apresentação” adequada e existem outras opções?

Georgi Georgiev
fonte

Respostas:

17

A lógica de apresentação compreende a lógica e os cálculos necessários para apresentar os dados comerciais da maneira correta para uma exibição específica.
Para visualizações gráficas complexas, isso pode ser cálculos bastante complexos (por exemplo, calcular o tamanho de cada fatia da torta e o posicionamento dos rótulos para um gráfico de torta), mas a principal característica é que ela calcula apenas as informações relevantes para a atual vista e que não modifica os dados comerciais de forma alguma.

É discutível se a seleção de campos para o modo de edição / criação é um uso adequado da lógica de apresentação. Em parte, depende do tipo e da quantidade de personalização.
Por exemplo, se a diferença for apenas uma alteração de título ou mostrar um ou dois campos como somente leitura em um dos modos, poderá ser a escolha certa para ter uma visualização e selecionar os modos dinamicamente.
Por outro lado, minha primeira reação foi que realmente deveriam ser duas visualizações diferentes, onde as partes comuns são importadas de um terceiro arquivo (semelhante à frequência com que o cabeçalho e o rodapé são adicionados às visualizações).

Bart van Ingen Schenau
fonte
12

Parece perfeitamente razoável usar uma ou duas instruções @if em uma exibição do Razor.
Eles adicionaram @if ao Razor - ele deve ser usado.

Seu código pode ser reduzido para um @if:

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

Uma alternativa é usar três visualizações:

  • Vista parcial contendo o HTML comum
  • Criar vista (chama a vista parcial)
  • Editar vista (também chama de vista parcial)

Você pode conferir DisplayTemplates e EditorTemplates, que são uma boa maneira de dividir visualizações somente leitura e editáveis.

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


fonte