Ao desenvolver um aplicativo ASP.NET MVC que permita a atualização do modelo, é necessário saber como obter o modelo de exibição atualizado e correspondê-lo novamente ao modelo que agora está atualizado. Parece haver algumas maneiras diferentes de fazer isso e estou me perguntando se alguma delas não é MVC adequada (como ter seus dados de armazenamento do controlador que deveriam estar no modelo não é a MVC adequada)?
Todos os modelos de exibição têm um ID: profissionais
- Sempre verifique se você pode corresponder ao seu modelo.
Contras
- Você deve ter muito cuidado para que nenhum dos IDs tenha sido alterado, caso contrário, você poderá fazer com que os usuários atualizem as linhas às quais eles não deveriam ter acesso.
Somente os modelos de visualização mínima nua têm um ID: Prós
- Muito menos verificação necessária para evitar que os usuários atualizem dados que não devem acessar.
Contras
- Muito mais difícil rastrear qual modelo de exibição corresponde a qual modelo.
- Você ainda precisa verificar os poucos modelos de exibição com IDs para garantir que o usuário não esteja atualizando dados aos quais não deve ter acesso.
Nenhum modelo de visualização tem ID:
Prós
- Não há necessidade de verificar os IDs para atualizações.
Contras
- Você tem que abandonar a apatridia.
Então eu tenho duas perguntas.
Primeiro, existe uma escolha correta / incorreta? (Caso contrário, isso significa que a escolha é uma questão de opinião e minha segunda pergunta é baseada na opinião e deve ser ignorada.)
Segundo, se houver uma escolha correta / incorreta, qual é?
Para esclarecer um comentário, estou falando quando você tem um modelo de exibição que é uma imitação do seu objeto de banco de dados.
Pense nisso:
public class InvoiceViewModel //Does not have ID, does not relate to model.
{
public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model.
public AddressViewModel BillingAddressVM { get; set; } //Ditto
public AddressViewModel ShippingAddressVM { get; set; } //Ditto
public List<InvoiceLineItemViewModel> ItemVMs { get; set; } //Each one has an ID?
}
isso não:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
You have to abandon statelessness.
- Você acabou de escolher usar o MVC sem sentido.