Je suis curieux de connaître les différentes façons dont les gens construisent leurs ViewModels et les raisons pour lesquelles ils choisissent cette méthode.
Je peux penser à plusieurs façons de le faire :
-1. Référentiel injecté - le contrôleur charge le modèle et mappe vers le ViewModel. Ici, le constructeur du ViewModel pourrait prendre diverses collections pour les définir entre elles, par exemple dans une liste de sélection telle que :
public CustomerController(ISomeRepository repository)
{
_repository = repository;
}
public ActionResult Create()
{
CustomerCreateViewModel model = new CustomerCreateViewModel(_repository.GetShipTypes,
_repository.GetStates);
..
..
}
-2. ViewModelBuilder - Injecté ou instancié dans le contrôleur avec une instance du référentiel injecté. Appelé via quelque chose comme
\>`var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);`
ou,
var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
-3. Directement dans le contrôleur (pas de code requis - c'est compliqué)
-4. Un autre service (injecté ou non) qui renvoie un modèle de domaine que le contrôleur mappe ensuite ou un ViewModel (quelqu'un fait cela pour renvoyer un modèle de vue qui n'est pas spécifiquement nommé/noté comme une classe de construction de ViewModel ?)
public JobCreateViewModel BuildJobCreateViewModel(int parentId)
{
JobCreateViewModel model = new JobCreateViewModel();
model.JobStatus = _unitOfWork.JobRepository.GetJobStatuses();
model.States=_unitOfWork.StateRepository.GetAll();
return model;
}
Maintenant, au retour, en ce qui concerne la validation de vos modèles de vue, héritez-vous d'une classe ViewModel de base pour les validations standard, ou copiez-vous vos validations (ex. attributs d'annotation de données) entre tous vos ViewModels, ou comptez-vous simplement sur la validation côté serveur pour que tout puisse être validé par votre objet de domaine ?
D'autres ? Quelque chose de mieux ? Pourquoi ?
EDITAR Sur la base d'un lien ci-dessous, j'ai trouvé un bel article de Jimmy Bogard sur l'architecture des ViewModels. Bien qu'il ne réponde pas directement à la question ci-dessus, c'est une excellente référence pour quiconque vient ici pour des informations sur les ViewModels. http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/