JsonResult в слое сервисов - PullRequest
       3

JsonResult в слое сервисов

0 голосов
/ 30 декабря 2011

В моем решении MVC3 мне интересно, как переместить логику, которая возвращает Json из контроллера, на уровень обслуживания. Скажем, у меня в контроллере есть следующее действие, чтобы получить Json, необходимый для элемента управления автозаполнением JQueryUI:

public JsonResult ClientAutocompleteJSON(string term)
{
    NorthwindEntities db = new NorthwindEntities();
    var customers = db.Customers
                .Where(c => c.ContactName.Contains(term))
                .Take(25)
                .Select(c => new
                {
                    id = c.CustomerID,
                    label = c.ContactName,
                    value = c.ContactName
                });

    return Json(customers, JsonRequestBehavior.AllowGet);
}

Как бы я переместить это на уровень обслуживания? Я бы предпочел не ссылаться на System.Web.MVC в моем слое обслуживания. Я также думал о возвращении клиентов, но я не уверен, как вернуть анонимный тип - нужно ли мне создавать класс?

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Я бы не привязывал реализацию вашего сервиса к определенному (UI) формату.Было бы лучше вернуть строго типизированный объект клиента и затем отформатировать его так, как вы хотите, в вашем методе Action.

// Service method

public IEnumerable<Customer> FindCustomers(string term) {
    NorthwindEntities db = new NorthwindEntities();
    return db.Customers
                .Where(c => c.ContactName.Contains(term))
                .Take(25)
                .ToList();
}

// Action method

public JsonResult ClientAutocompleteJSON(string term) {

    var customers = customerService.FindCustomers(term)
                        .Select(c => new
                        {
                            id = c.CustomerID,
                            label = c.ContactName,
                            value = c.ContactName
                        });

    return Json(customers, JsonRequestBehavior.AllowGet);
}

Этот код гораздо более пригоден для повторного использования - например, вы можете использовать тот же метод обслуживания дляпредоставьте простую форму поиска HTML.

1 голос
/ 30 декабря 2011
0 голосов
/ 30 декабря 2011

Я знаю о функции в Ruby on Rails, там вы можете определить, что ваш метод способен возвращать JSON или XML или HTML на основе предпочтений клиента, это будет хорошая возможность, если вы найдете библиотеку, которая может это делать для тебя. Это может быть аспект, который может обеспечить динамическое проксирование ваших сервисов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...