Et que mettez-vous dans votre View?Que mettre dans votre ViewModel
Un blog récent de Scott Hanselman sur l'utilisation d'un liant spécial modèle pour le test plus facile m'a amené à penser à ce qui suit: Qu'est-ce que vous mettez dans votre logique de commande la construction du modèle de vue, et ce qui doit être mis dans la vue? ce qu'il fait est le suivant:
var viewModel = new DinnerFormViewModel {
Dinner = dinner,
Countries = new SelectList(PhoneValidator.Countries, dinner.Country)
};
return View(viewModel);
Maintenant, j'utilise la même manière de transmettre des données à mon avis, mais je ne suis pas sûr de la façon dont il traite la propriété des pays. Vous pouvez argumenter des deux côtés: Envelopper la liste des pays dans la liste SelectList prépare les données pour la vue, tout comme vous créez un DTO viewmodel pour transmettre vos données. D'autre part, il semble que vous manipulez spécifiquement les données à utiliser dans une liste déroulante, ce qui limite la façon dont la vue traite vos données depuis le contrôleur. Je pense que c'est un peu une zone grise sur la séparation des soucis entre la vue et le contrôleur, et je ne peux pas vraiment décider quel chemin à parcourir. Existe-t-il des meilleures pratiques pour cela? PS: Pour rester simple, supposons le contexte ASP.NET MVC par défaut, donc, fondamentalement, votre projet initial. Moteur de vue par défaut et tout ce jazz.
ouais, je pense que vous avez raison. Si vous avez besoin d'une autre représentation de la liste des pays dans la vue, vous créez une autre vue DTO pour cela, n'est-ce pas? –
Probablement. Bien que peut-être SelectList peut être représenté par une construction d'interface utilisateur différente comme peut-être une liste de cases à cocher ou quelque chose. Peut-être qu'une méthode d'aide html différente pourrait toujours utiliser une SelectList et sortir quelque chose d'autre. –
+1 L'utilisation de modèles de vue supprime encore plus de logique de la vue, ce qui est toujours souhaitable. –