Является ли хорошей практикой использование собственного веб-API приложения MVC для привязок Ajax?

Я пишу приложение, которое имеет много виджетов Ajax (точнее, Kendo-UI). Все эти Ajax-ответы без стандартных контроллеров становятся запутанными, поэтому я начал думать о том, чтобы сделать каждый объект отдельным контроллером. Если у меня есть время, чтобы сделать это, я подумал, что мог бы пойти дальше и сделать это как WebAPI, поскольку я планировал сделать это в не столь близком будущем, но, эй, это уже будет сделано...

Итак, мой вопрос: является ли хорошей практикой использование собственного веб-API приложения MVC в качестве каналов виджета Ajax или есть ли какая-либо причина придерживаться стандартных контроллеров?

Я видел некоторые аргументы по поводу производительности, но я не думаю, что это применимо к этой ситуации. Я считаю, что это была скорее ситуация «Контроллер, вызывающий WebAPI», которая имеет очевидные потери производительности. Но поскольку это уже Ajax-вызов на стороне клиента, независимо от того, входит ли он в стандартный контроллер MVC или контроллер WebAPI, ничего не изменится, не так ли?

Редактировать

Дополнительная информация по проекту:

  • Я использую Entity Framework для доступа к данным.
  • У меня есть шаблон репозитория с UnitOfWork.
  • Я использую правильную структуру MVC (EF POCO автоматически сопоставляются с DTO POCO в репозитории и загружаются в модели просмотра контроллерами)
  • Это проект MVC 4 на .NET 4.0.
  • Существует много отношений с базой данных (особенно для объекта, с которым я работаю в данный момент)

person Pluc    schedule 23.10.2012    source источник


Ответы (2)


Я не знаю о "хорошей практике", но это точно не "плохая практика". Я не вижу разницы, делаете ли вы это в приложении или в другом.

person Erik Funkenbusch    schedule 23.10.2012

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

Оба приложения, которые я написал и продолжаю поддерживать, используют практически тот же стек, что и ваше приложение.

Недавно я переработал одно из приложений, чтобы использовать API для всех обычных вещей, таких как списки, которые я привязываю к Kendo ComboBoxes и т. д. в своих представлениях. Это довольно большое приложение, которое повторно использует множество одних и тех же списков, таких как состояния, приоритеты, сложности для различных сущностей и представлений, поэтому имеет смысл поместить их в API.

Я не зашел так далеко, чтобы пройти через всю свинью. Я провожу линию такими вещами:

public ActionResult GetAjaxProjectsList([DataSourceRequest]DataSourceRequest request)
    {
        return Json((DataSourceResult)GetProjectsList().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }

Это очень специфично для того, как Kendo Grid хочет вернуть данные. Ничто другое, что я подключаю к этому приложению, не будет использовать эти данные в этом формате, поэтому я храню их в контроллере.

Короче говоря... Я использую API для обычных вещей в одном и том же приложении MVC и вещей, которые я разрешаю использовать другим приложениям или службам, таким как Excel.

person Chris.ZA    schedule 24.07.2013