Meilleures pratiques pour MVC .. Exemple de liaison ViewModel à l'aide d'Interfaces

Je suis nouvelle ASP.NET MVC 3.0 et d'essayer de construire une application à l'aide de la MVC ViewModel de conception..

Je me demandais ce que les meilleures pratiques sont reclassement des contrôleurs pour Viewmodel et avoir quelques questions ci-dessous.. C'est ma compréhension de la mesure (qui peut être faux)..

  • Nous de créer des Modèles.
  • Créer des ViewModels en faisant une nouvelle classe et declairing attributs avec le même nom et de même type que le modèle de base des classes (y compris les champs ID de la base de modèles que vous souhaitez mettre à jour plus tard.. et les classes ne sont pas liés de quelque façon).
  • Créer un Référentiel pour chacun des modèles de base (pour trouver et enregistrer des données ect.).
  • Créer un Contrôleur d'action pour chacun des ViewModels (dont l'accès aux référentiels des classes de base pour récupérer des valeurs et de mettre ces valeurs dans le ViewModel, puis passer le ViewModel pour le Viewmodel).
  • Créer des Vues du Viewmodel (ViewModel Vues)
  • Dans le ViewModel contrôleur de mise à Jour (POST) méthode de recevoir la mise à jour du ViewModel de l'objet et de le convertir en modèle de base des objets (Peut-être utiliser Automapper?) et ensuite enregistrer le modèle de base des objets à l'aide de leurs dépôts et de les appliquer de liaison de ce genre? "TryUpdate<'IPerson>(personne)", "TryUpdate<'IPlace> ();" (ce qui est anormal, l'objectif est de mettre les valeurs dans les classes de base à partir de ce Dernier, s'appliquent de liaison, d'enregistrer les modèles de base arrière à l'aide de les dépôts!.. Cela ne semble pas utiliser les référentiels.. au Lieu de TryUpdate<'IPerson>(personne); je m'attends à voir quelque chose comme ceci: la personne.Enregistrer(IPerson).. où "personne contient les valeurs", ".Enregistrer est le référentiel", et "IPerson contient la liaison des attributs à utiliser pour la liaison"?.. Vous ne savez pas si c'est à droite..

Pour l'instant j'ai créé Viewmodel en faisant une nouvelle classe et l'ajout d'attributs à partir de modèles de base en utilisant les mêmes noms. À ce stade, j'ai les questions suivantes:

Q1: est-ce que chaque ViewModel avoir son propre contrôleur et de l'accès de base des modèles de classes de dépôt pour obtenir ses valeurs?

T2: dans le ViewModel devriez-vous inclure le champ ID de tous les modèles de base que vous utilisez des attributs à partir d', compte tenu de ce que vous pourriez souhaitez publier une mise à Jour en arrière à travers le Viewmodel Contrôleur à la base des Modèles de référentiel (besoin de l'ID de valeurs)?

Q3: Comment voulez-vous lier d'attributs à l'aide d'une interface pour la liaison du modèle dans le contrôleur en utilisant le référentiel pour l'enregistrement.

J'ai été incapable de trouver un tutoriel ou une ressource qui explique tout étape par étape exemple, Une réponse complète serait l'exemple suivant:

  • 2x modèles simples, 1x simple viewModel, 1x interface pour la liaison, 1x contrôleur simple à l'aide d'une classe d'interface pour la liaison sur la mise à jour, 1x référentiel.. c'est à dire

//Model1

public class Person
{
  int PersonID {get;set;}
  string FirstName {get;set;}
  string LastName {get;set;}
  DateTime DOB {get;set}
}

//Model2

public class Place
{
  int PlaceID {get;set;}
  string Description {get;set;}
  string AreaType {get;set;}
  string PostCode {get;set;}
}

//ViewModel (contenant des attributs à partir de modèles)

publc class ViewModel
{
  //Person attributes
  int PersonID {get;set;}
  string FirstName {get;set;}
  string LastName {get;set;}

  //Place attributes
  int PlaceID {get;set;}
  string Description {get;set;}
  string AreaType {get;set;}

  //other attributes
  string someOtherAttributeForDisplay {get;set}
}

//Model1 interface (pour la liaison sur le modèle)

public interface IPerson
{
  string FirstName {get;set;}
}

//Model2 interface (pour la liaison sur le modèle)

public interface IPlace
{
  string Description {get;set;}
  string AreaType {get;set}
}

//ViewModelController?

{
  //What goes here?
}

//Référentiel?

{
  //what goes here?
}

source d'informationauteur HonourCode | 2011-10-27