Хорошая практика иметь контроллер данных только в MVC?
Я использую ASP.NET MVC2 и имею различные контроллеры в разных областях.
Во многих из них мне нужно выбрать значение из списка значений, содержащихся в базе данных; например, выбрать продукт или сотрудника.
В настоящее время я думаю о контроллере, предназначенном для получения этих списков вещей для использования с выпадающими списками и т. Д. Этот контроллер будет просто запрашивать DAL и обслуживать объекты JSON для загрузки с помощью вызова ajax в любом представлении, в котором они необходимы.
Единственное, что меня беспокоит, так это то, что, по моему мнению, данные будут получены одновременно с разных контроллеров.
Правильно ли я беспокоюсь? Есть ли лучший способ настроить это, может быть, создание Product
/Employee
класс, особенно для создания общего строго типизированного частичного представления из?
3 ответа
Создайте другой класс, который действует как промежуточный уровень между вашими контроллерами и кодом доступа к данным. Теперь вы можете вызывать методы этого класса из разных контроллеров.
public class ItemService()
{
public static List<Items> GetItems()
{
var items=yourRepositary.GetItems();
return items;
}
}
Вы можете позвонить с разных контроллеров прямо сейчас
public ActionResult GetItems()
{
var items=ItemService.GetItems();
return Json(items,JsonRequestBehavior.AllowGet);
}
Другой подход заключается в использовании контроллера базового класса, который реализует эту общую функциональность, а затем наследует от него другие конкретные контроллеры (в паре с представлениями).
Этот подход будет поддерживать ситуацию, когда существует множество различных списков или списки, которые необходимо строить динамически в ответ на входные параметры.
Подход ActionFilterAttribute мог бы лучше подходить для ситуаций, когда имеется меньше статических списков.
Лучшее решение imho - создать пользовательский атрибут ActionFilterAttribute, который заполняет словарь ViewData любыми данными, которые вам необходимо отобразить в представлениях. Затем вы можете создать расширения для ViewDataDictionary для доступа к этой информации безопасным для типов способом из представлений или выбросить исключение, если ViewData не содержит данных (т. Е. Предлагает добавить атрибут фильтра действия над вашим методом контроллера). Использование наследования может привести вас в беспорядок дальше по дороге.