2010-12-14 121 views
1

Je souhaite créer une API pour une grande application ASP.NET MVC. Cette application utilise des viewmodels fortement typés pour toutes ses vues. Le travail le plus important pour l'API sera de permettre la fonctionnalité du site sur d'autres plateformes telles que l'Objective C de l'iPhone.Réutilisation de ViewModels pour API dans ASP.NET MVC?

Maintenant, l'idée est de réutiliser les ViewModels et les actions de contrôleur existantes pour l'API, dans un tel manière que les modèles de vue soient renvoyés en tant que résultats JSON ou Ajax par le contrôleur au lieu de la vue.

Mais il y a eu quelques discussions à ce sujet, parce que viewmodels a beaucoup d'informations composites qui ne semblent pas toujours utiles pour une API. Par exemple, une fonction d'API typique pourrait être GetRanking(). Le viewmodel appartenant à l'action Ranking() contient en réalité plus de données, telles que le nom de l'utilisateur actuel et peut-être quelques explications sur le classement. La question est donc de savoir quelle serait la meilleure façon d'aborder cela: écrire des actions séparées pour les objets api et renvoyer des objets de domaine sérialisés, ou réutiliser les actions et modèles de vue en cours, et ignorer simplement les données inutiles?

Répondre

0

Ou troisième option: créez un ensemble de modèles de service. À long terme, la grande victoire dans la création de ViewModels séparés tend à être la vue et les entités peuvent changer indépendamment. Les services ont également quelques dimensions uniques - telles que la gestion des versions - que vous n'avez pas besoin de prendre en compte ailleurs. En tout cas, le service mérite presque toujours un modèle et de son propre. Maintenant, vous pouvez souvent faire valoir que les ViewModels pourraient descendre/utiliser les modèles de service pour le côté transfert de données de leur rôle. Surtout pour les mises à jour qui ont tendance à être un peu agnostique.

+0

Est-ce que vous le réutiliser les actions du contrôleur, ou de créer des actions spécifiques pour l'API? – Randam

+0

C'est un peu une décision tactique pour être honnête. Cela dit, vos contrôleurs doivent être simples, pas cher et comme le véritable jetable magique devrait se produire dans la couche de domaine, alors je ferais probablement un ensemble distinct de contrôleurs de service. –