/ / Les vues partielles fortement typées sur une page dans asp.net mvc-2 devraient-elles avoir un modèle de vue combiné? - asp.net-mvc, asp.net-mvc-2, viewmodel, vues partielles, vue fortement typée

Les vues partielles fortement typées sur une page dans asp.net mvc-2 doivent-elles avoir un modèle de vue combiné? - asp.net-mvc, asp.net-mvc-2, modèle de vue, vues partielles, vue fortement typée

J'ai une question à propos des vues partielles fortement typées asp.net mvc-2 et des modèles de vue.

Je me demandais simplement si je pouvais (ou devrais) avoir deux vues partielles fortement typées sur une seule page, sans implémenter un tout nouveau modèle de vue pour cette page.

Par exemple, j'ai une page qui afficheprofils, mais a également un formulaire en ligne pour ajouter un contact rapide. Chacune de ces entités possède déjà son propre modèle de vue, c'est-à-dire que j'ai un ProfileViewModel et un ContactViewModel.

Donc, ma vue a besoin de deux partielles fortement typéesvues, une utilisant une liste IEnumerable de ProfileViewModels et une utilisant un ContactViewModel. Est-il possible ou souhaitable d'éviter de créer un troisième modèle de vue, un "IndexViewModel" pour cette page, qui contient une liste de ProfileViewModels et un ContactViewModel? La mise en œuvre de ce modèle de vue n'est-elle pas une mauvaise pratique, ou plus ordonnée car elle entraîne moins de modèles de vue?

Merci!

Réponses:

1 pour la réponse № 1

Si les deux vues partielles nécessitent des modèles de vue déjà définis, la page qui héberge ces partiels doit fournir les modèles de vue d'une manière ou d'une autre. Il est facile d’imaginer comment un IEnumerable<ProfileViewModel> doit être fourni sur la page contenant, car les informations de contact arrivent probablement par l'arrière. Est-ce que le ContactViewModel détiennent réellement des données? Si ce n'est pas le cas, vous pourrez peut-être le créer sur place dans la vue de la page contenant, et vous en sortir en ne passant qu'un IEnumerable<ProfileViewModel> à elle.

Sinon, la vue contenant doit recevoir à la fois un IEnumerable<ProfileViewModel> et un ContactViewModel. L'option vers laquelle je pencherais estdéfinir un nouveau modèle de vue qui a des membres de données pour ces deux valeurs. Il est un peu mieux documenté et permet une meilleure vérification du type de compilateur que l'alternative de passer ces valeurs via ViewData[].

Quelque peu sous-entendu dans votre question est la notionque la création d'un modèle de vue est une corvée. Cela peut en effet être le cas pour les vues partielles, si la définition du modèle de vue reflète simplement celle d'une entité d'arrière-plan. Si tel est le cas, vous voudrez peut-être envisager de passer l'entité d'arrière-plan directement au lieu de dupliquer sa définition et le contenu dans un modèle de vue.

Enfin, les modèles de vues ne sont qu'un outil. Utilisez-les s'ils ajoutent de la valeur. Certaines applications gagnent en clarté, en documentation et en avantages de couplage lâche en utilisant des classes de modèle de vue distinctes. D'autres, souvent des applications plus petites, ne gagnent pas suffisamment pour mériter les frais généraux. Il n'y a rien de intrinsèquement «mauvaise pratique» à ne pas implémenter des modèles de vue (ou tout autre modèle de conception, d'ailleurs). C'est un choix de conception que vous pouvez ressentir à l'aise si vous avez un argument raisonnable en sa faveur.