Lorsque vous développez une application ASP.NET MVC qui permet la mise à jour du modèle, vous avez besoin d'un moyen de savoir comment prendre le modèle de vue mis à jour et le faire correspondre au modèle qui est maintenant mis à jour. Il semble y avoir plusieurs façons différentes de le faire et je me demande si certaines d'entre elles ne sont pas des MVC appropriées (tout comme avoir des données de stockage de votre contrôleur qui devraient être dans le modèle n'est pas une MVC appropriée)?
Tous les modèles de vue ont un ID: Pros
- Assurez-vous toujours que vous pouvez vous adapter à votre modèle.
Les inconvénients
- Vous devez être très prudent qu'aucun des ID n'a été modifié, sinon vous pouvez demander aux utilisateurs de mettre à jour les lignes auxquelles ils ne devraient pas avoir accès.
Seuls les modèles de vue minimale nue ont un ID: Pros
- Beaucoup moins de vérification nécessaire pour éviter aux utilisateurs de mettre à jour des données auxquelles ils ne devraient pas accéder.
Les inconvénients
- Il est beaucoup plus difficile de savoir quels modèles de vue correspondent à quel modèle.
- Vous devez toujours vérifier les quelques modèles de vue avec des ID pour vous assurer que l'utilisateur ne met pas à jour les données auxquelles il ne devrait pas avoir accès.
Aucun modèle de vue n'a d'ID:
Avantages
- Pas besoin de vérifier les identifiants pour les mises à jour.
Les inconvénients
- Vous devez abandonner l'apatridie.
J'ai donc deux questions.
Tout d'abord, y a-t-il un choix correct / incorrect? (Sinon, cela signifie que le choix est une question d'opinion et ma deuxième question est basée sur l'opinion et doit être ignorée.)
Deuxièmement, s'il y a un choix correct / incorrect, quel est-il?
Pour clarifier un commentaire, je parle lorsque vous avez un modèle de vue qui est une imitation de votre objet de base de données.
Pensez ceci:
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?
}
pas ça:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
la source
You have to abandon statelessness.
- Vous venez de faire le choix d'utiliser MVC inutile.Réponses:
L'objet ViewModel n'est généralement pas ce qui est stocké dans une table de base de données. Ce sont les éléments individuels de l'objet ViewModel qui sont stockés. Chacun de ces éléments a déjà un ID.
Par exemple:
Puisqu'il n'y a pas de table unique dans la base de données qui correspond à un InvoiceViewModel, il n'y a pas d'ID pour un objet InvoiceViewModel.
Bien sûr, vous pouvez toujours utiliser le InvoiceID comme identifiant pour ce ViewModel particulier. InvoiceID est pratique, car c'est ce que cet objet représente finalement. Mais je pouvais voir avoir un objet ViewModel qui ne correspond à aucun ID particulier dans la base de données.
la source
Par défaut, vous devez avoir un identifiant en vue même si vous ne l'utilisez pas. Créez une colonne dans la base de données nommée comme
id
et cochez laauto increment
fonction dessus afin que vous soyez trié.la source