2010-12-14 3 views
1

Я хочу создать API для большого приложения ASP.NET MVC. Это приложение использует сильно типизированные режимы просмотра для всех своих представлений. Наиболее важной задачей для API будет включение функциональности веб-сайта на другие платформы, такие как Objective C.Повторное использование ViewModels для API в ASP.NET MVC?

Теперь идея была с самого начала, чтобы повторно использовать ViewModels и существующие действия контроллера для API, в таком способ, которым модели представления возвращаются как результаты JSON или Ajax контроллером вместо представления.

Но было некоторое обсуждение об этом, поскольку в моделях просмотра много сложной информации, которая не всегда кажется полезной для API. Например, типичной функцией API может быть GetRanking(). Модель просмотра, принадлежащая к действию Ranking(), фактически имеет больше данных, таких как имя текущего пользователя и, возможно, некоторое объяснение ранжирования.

Итак, вопрос в том, каким будет наилучший способ приблизиться к этому: написать отдельные действия для api и вернуть сериализованные объекты домена или повторно использовать текущие действия и режимы просмотра и просто игнорировать ненужные данные?

ответ

0

Или третий вариант: создать набор сервисных моделей. Долгосрочная, большая победа в создании отдельных ViewModels имеет тенденцию быть видом, и сущности могут меняться независимо. У служб также есть несколько уникальных параметров, таких как управление версиями, что вам может и не нужно учитывать в других местах. В любом случае, сервис почти всегда заслуживает модель в своем собственном.

Теперь вы можете часто утверждать, что ViewModels могут спускаться с/использовать модели обслуживания для стороны передачи данных своей роли. Особенно для обновлений, которые, как правило, немного отличаются.

+0

Вы могли бы повторно использовать действия контроллера или создавать отдельные действия для API? – Randam

+0

Это немного тактическое решение быть честным. Тем не менее, ваши контроллеры должны быть простыми, дешевыми и выброшенными, поскольку настоящая магия должна происходить в доменном слое, поэтому я, вероятно, сделаю отдельный набор сервисных контроллеров. –

Смежные вопросы