Est-il judicieux d'avoir Viewmodel dans la Webapi?
Je commence à apprendre le webapi et je me retrouve à faire des trucs qui fait sens dans un projet MVC, mais ne peut faire sens dans.
Normalement dans un projet MVC-je faire Viewmodel et de l'utiliser comme paramètre ou passer à la vue.
Puisqu'il n'existe pas de points de vue dans webapi je suppose que cela ne fait pas de sens d'avoir un ViewModel comme paramètre.
Je suis vous vous demandez peut-être si je doit juste avoir un Paramètre de mon EF domaines(premier code) et de mettre des annotations de données sur le haut de ces. Normalement, je voudrais mettre des annotations sur le modèle de vue des propriétés que j'ai aimé ce sur le domaine.
Cependant, ce qui est me retient de le faire, c'est que je ne suis pas 100% clair comment mon MVC site de travail.
Ne le MVC site juste cracher arrière simples vues et puis vous utilisez Jquery pour appeler votre webapi ou avez-vous juste d'appel MVC méthodes d'action qui, directement, il suffit d'appeler le même méthodes de la Webapi appellerais?
Si est la deuxième façon, alors je préfère mettre les annotations de données sur mon modèle de vue nouveau, mais ensuite, je mets les mêmes sur les deux l'EF de domaine et de l'ordinateur virtuel et qui semble redondant.
Vous devez vous connecter pour publier un commentaire.
La terminologie de côté, d'avoir des modèles pour la liaison à est toujours de l'utiliser. Ils ne sont simplement pas techniquement Viewmodel plus, en ce que vous êtes en droit il y a pas de points de vue impliqués. Mais ils sont certainement encore de l'utiliser. Leur utilisation permet de profiter d'attributs de vos propriétés du Modèle et permet de réutiliser l'ensemble de votre API, si nécessaire. Rappelez-vous aussi si vous utilisez votre entités directement WebAPI servira de modèle pour lier tous les paramètres à leur correspondant par son nom, même si vous ne vous en veux pas.
Aussi, l'Entité Modèles sont des représentations de vos données brutes, mais les Modèles utilisés pour la liaison contre sont un contrat fixe que les requêtes à l'API besoin pour satisfaire avec succès pour traiter une demande. Les valeurs dans lequel, pourrait s'étendant sur plusieurs modèles d'entité par le temps de la mise en œuvre est fait, et ne pas être conservées dans une banque de données à tous.
Ma suggestion après un loooong moment de travail avec cette des "choses" :
BindingModels pour la liaison de données (mvc ou de l'api)
Viewmodel pour les vues sur mvc (vous pouvez avoir de la mvc pages à l'intérieur de votre api, il est donc bon d'avoir une
lieu de cela, ce peut être la documentation, la page d'intro, que ce soit. Si il n'y a aucune vue, vous pouvez avoir zéro, un Viewmodel) Un avantage de ceci est que vous pouvez dans vos Vues/web.config ont le Viewmodel de l'espace de noms de référence et il ne sera pas pollué par votre api ressources.
ResourceModel pour l'api web de ressources. Dans webapi, imbriqués les ressources sont également des ressources qui vont n'importe où dans l'arbre, qui n'est pas commun sur mvc, nommer les ressources de faire beaucoup de sens.
Si vous souhaitez bénéficier d'une ressource, vous pouvez utiliser votre modèle de ressources. Souvenez-vous de votre réception sont les mêmes, votre envoi de retour.
Si vous voulez une liaison personnalisée pour l'entrée (ce doit être votre scénario par défaut) vous avez vos modèles de liaison.
Si vous avez des mvc vue, pour l'administration des fins, de la documentation, que ce soit, utilisez votre Viewmodel.
Si vous avez une page de formulaire sur mvc, vous pouvez utiliser votre BindingModel également sur le POSTE de contrôleur. Pas besoin d'avoir un modèle différent pour un post sur MVC ou WEBAPI. Spécialement lorsque le modèle de classeur ou le formateur peut à la fois comprendre et carte pour le même modèle de liaison en utilisant les mêmes Données d'Annotations.
Parfois, vous voulez créer un modèle de liaisons avec des ressources et de quelques champs supplémentaires. L'héritage est votre ami.
Parfois, vous voulez créer la liaison de modèle avec plus de ressources et, éventuellement, des champs supplémentaires) Ressources que les propriétés qui sont vos amis.
MVC monde, vous pouvez également utiliser le concept de "Ressource", mais il est beaucoup moins commun. Ce venir dans maniable quand vous avez MVC et Web Api sur le même projet.
Si vous avez besoin d'autres commentaires sur n'importe quel élément (comme la structure de dossier, les espaces de noms, etc), laissez-moi savoir. Je suis plus qu'heureux de partager mon cons pros de l'expérience.
Oh, et j'oubliais, une stratégie de mapping vaut la peine de la recherche. Personnellement, je fais mes propres mappings, mais en ayant cette logique en un seul endroit est inestimable.
EDIT:
Très naïf exemple
[Controller][Action]ViewModel
. J'ai donc risque de se retrouver avec quelque chose commePeopleEditFormModel
[Model]Resource
pour les ressources,[Controller][Action]ViewModel
pour viewmodel et[Command]BindingModel
pour les modèles de liaison, (où commande est le but de l'action, comme CancelOrder, CreateModel, etc) Généralement de la Commande = ActionName.Si vous essayez de construire un REPOS en fonction du système puis la notion de ViewModel et la Vue peut être très utile. Vous pouvez d'assez près la carte de la notion de Ressource pour ViewModel et de la représentation de la Vue.
Si vous arrêtez de réfléchir un instant à quoi ressemble une vue dans un MVC site. C'est un document HTML. Un document qui contient un tas de sémantique de l'information, le titre, le corps, sections, paragraphes, tableaux, etc. Il n'est pas censé contenir de "style" de l'information. C'est le travail du navigateur web et les CSS. Les gens sont confus quand ils commencent à penser HTML de l'INTERFACE utilisateur. Il n'est pas censé être de l'INTERFACE utilisateur, c'est le contenu de l'INTERFACE utilisateur.
Vues sont juste une réalisation concrète du modèle de vue du contenu à l'aide de certains médias qui peuvent être transférés sur le fil. Ce que ce type de support est, dépend de ce que le client vous êtes à essayer de satisfaire.
Nous sommes actuellement en train de travailler sur un projet similaire qui utilise ASP.Net MVC et ASP.Net l'Api Web.
Nous utilisons ASP.Net MVC pour générer la structure globale de nos pages.
Ensuite, notre MVVM javascript mise en œuvre des appels à l'api de web pour remplir les données renvoyées au client de visualiser les modèles. Pour ce faire, notre api retourne modèle de vue qui correspondent à ce que l'extrémité avant est en attente pour les.
Je pense que votre api des modèles de vue serait différent de MVC Viewmodel (qui ne sont pas des ViewModels à partir d'un MVVM point de vue).
Cela dépend de votre utilisation de l'api de trop. Par exemple, pour un usage interne, vous n'avez pas toujours besoin d'éviter de montrer votre modèle de domaine. Ce qui vous évitera de carte le Modèle dans le ViewModel et augmenter les performances.
Mais dans le cas où vous avez besoin pour transformer certaines propriétés dans vos modèles, viewmodel va grandement vous aider à structurer votre code dans une manière faiblement couplée.
Je dirais que votre api est consommée par votre point de vue à la fin, il est logique d'avoir ViewModel.
C'est juste une question de choix ici. Vous pouvez appeler MVC pour recevoir vues (en html) ou vous pouvez appeler WebApi pour recevoir JSON/XML réponses que vous pourrez ensuite le lier avec votre code javascript dans vos vues.
Juste pour ajouter que d'autres l'ont dit, l'utilisation de ce qui serait normalement être appelé un ViewModel est utile pour la validation. Vous pouvez marquer vos classes avec des annotations de données, y compris toutes les exigences en matière de validation. Dans vos actions de contrôleur, vous pouvez toujours utiliser ModelState pour forcer la validation de produire et de renvoyer les messages appropriés via HttpRequestException ou tout simplement HttpResponseMessage.