У меня есть страница, которая состоит из множества пользовательских элементов управления. Модель представления для этой страницы довольно сложна.
public class ComplexViewModel
{
public ObjectA ObjectAProperty { get; set; }
public List<Things> ListOfThings { get; set; }
public List<ThingCategories> ListOfThingCategories { get; set; }
public List<ThingTypes> ListOfThingTypes { get; set; }
public List<ThingOptions> ListOfThingOptions { get; set; }
public int ChosenThingCategoryId { get; set; }
public int ChosenThingTypeId { get; set; }
public int ChosenThingOptionId { get; set; }
public OtherObject ObjectData { get; set; }
}
На этой странице также есть PostModel, который содержит информацию для фильтрации, сортировки и т. Д.
public class SimplePostModel
{
public int ChosenThingCategoryId { get; set; }
public int ChosenThingTypeId { get; set; }
public int ChosenThingOptionId { get; set; }
public int ChosenThingFilterTypeId { get; set; }
public int ChosenThingSortTypeId { get; set; }
public int ChosenThingOtherId { get; set; }
public int ChosenThingMoreId { get; set; }
public int ChosenThingOMGId { get; set; }
}
Проверяется простая модель PostModel, а затем контроллер открывает более 3 репозиториев, делая несколько вызовов в каждый, и строит модель представления. По меньшей мере, мое действие контроллера стало довольно большим.
Это, безусловно, самая сложная страница, над которой я работал, и мне трудно решить, как ее упростить.
Моей первой мыслью было создание фабрики моделей представлений, которая после проверки привязки вызывала бы репозитории и возвращала ViewModel.
Затем я подумал о создании пользовательского связывателя модели, который будет проверять PostModel, а затем увлажнять ViewModel за один шаг.
Итак, мой вопрос, как вы увлажняете модель сложного вида?
И пока я писал это, у меня была идея использовать Html.RenderAction и создать модель для каждого из пользовательских элементов управления, которые составляют этого зверя страницы.
Обновление:
Репозитории совершают вызовы в сервисы WCF, приложение является частью большой арки SOA.