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; }
}
fonte
You have to abandon statelessness.
- Você acabou de escolher usar o MVC sem sentido.Respostas:
O objeto ViewModel não é o que é armazenado em uma tabela de banco de dados, geralmente. São os itens individuais no objeto ViewModel que são armazenados. Cada um desses itens já possui um ID.
Por exemplo:
Como não há uma tabela única no banco de dados que corresponda a um InvoiceViewModel, não há ID para um objeto InvoiceViewModel.
Obviamente, você sempre pode usar o InvoiceID como o ID desse ViewModel específico. O InvoiceID é útil, porque é o que esse objeto representa em última análise. Mas eu pude ver um objeto ViewModel que não corresponde a nenhum ID específico no banco de dados.
fonte
Por padrão, você deve ter um ID em exibição, mesmo que não o esteja usando. Crie uma coluna no banco de dados nomeado como
id
e marque oauto increment
recurso sobre ele para que você seja classificado.fonte