2013-11-10 2 views
0

Прежде чем я попытаюсь создать это самостоятельно, я хочу спросить: есть ли какие-либо пакеты для ASP.NET WebAPI, которые позволяют одному ApiController делать CRUD на всех моих бизнес-объектах?WebAPI - страницы администратора для бизнес-объектов CRUD

Прямо сейчас у меня есть раздражающая ситуация, когда я должен создать «BookController», «AppleController», «LightController» и т. Д. ... для каждой страницы администратора, которая позволяет пользователю CRUD Books, Apple и Lights.

«BookController», «LightController» и т. Д. Настолько похожи, что мне больно продолжать создавать эти вещи.

У меня много бизнес-объектов, и они продолжают поступать, и каждому из них нужен CRUD. Так как это сделать:

Пример:

class BookController: ApiController 
{ 
    public HttpResponseMessage Get(int id=-1) { // do the read operation } 
    public HttpResponseMessage Post(Book b) { // do the create operation } 
    public HttpResponseMessage Put(Book b) { // do the update operation } 
    public HttpResponseMessage Delete(Book b) { // do the delete operation } 
} 

не масштабируется для моей ситуации. Я бы предпочел заменить BookController и все другие контроллеры CRUD примерно таким:

class CRUDController: ApiController 
{ 
    public HttpResponseMessage Get(int id=-1) { // do the read operation } 
    public HttpResponseMessage Post(object obj) { // do the create operation } 
    public HttpResponseMessage Put(object obj) { // do the update operation } 
    public HttpResponseMessage Delete(object obj) { // do the delete operation } 
} 

Любые предложения или подсказки?

+0

Есть ли какое-либо поведение, отличное от CRUD? То есть вам нужно будет добавить другие действия для любого из бизнес-объектов? – gooid

ответ

0

Написать общий базовый контроллер.

class CRUDController<T> : ApiController 
{ 
    public virtual HttpResponseMessage Get(int id=-1) { // do the read operation } 
    public virtual HttpResponseMessage Post(T obj) { // do the create operation } 
    public virtual HttpResponseMessage Put(T obj) { // do the update operation } 
    public virtual HttpResponseMessage Delete(T obj) { // do the delete operation } 
} 

Затем наследуйте свои контроллеры от него.

class BookController : CRUDController<Book> 
{ 
    ... 
} 

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

+0

это, безусловно, хорошее предложение ... Я ищу способ, который не требует от меня добавления каких-либо новых контроллеров для каждого типа бизнес-объекта. Но в зависимости от того, насколько сложно это доказать, я могу закончить это решение. Потому что я знаю, что мне придется делать что-то особенное с моими маршрутами, если нет BookController. (например) – JayPrime2012

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