Слияние ViewModel - PullRequest
       23

Слияние ViewModel

1 голос
/ 03 марта 2012

Я запускаю MVC и хотел бы получить ваши советы о моделях Repositories & View, в частности, о комбинировании нескольких наборов данных репозитория в одну виртуальную машину.

Если у меня есть веб-страница с тремя различными разделами (столбцами), для которых требуются собственные репозитории (извините за основную природу этого):

UserInfoData - отображается в левом столбце

DiaryData - отображается в среднем столбце

CommentData - отображается справа Col

Я делаю следующее: -

public ActionResult Index(int id)
{
  UserInfoData uid = repository.GetUserInfoData(id);
  UserInfoDataVM UserViewModel = Mapper.Map<UserInfoData, UserInfoDataVM>(uid);

  //RETRIEVE DiaryData & CommentData using same principle as above

  return ??
}

Как бы я объединил эти три виртуальные машины во что-то, что я мог бы вернуться к представлению - я использую другую виртуальную машину, которая принимает эти три виртуальные машины?

Есть ли лучшая практика при работе с небольшими сегментами веб-страницы, которые имеют свои собственные данные?

1 Ответ

3 голосов
/ 03 марта 2012

На мой взгляд, это зависит от вашего сценария использования.

Вы можете создать модель представления, содержащую три модели подвидов, но вам нужно спросить себя, собираюсь ли я использовать какую-либо из трех моделей подвидов где-нибудь еще? Если нет, то вы можете просто использовать одну модель большого представления. Иначе, нет ничего плохого в модели представления «обертка», которая инкапсулирует меньшие модели представления.

Вы можете сохранить три модели представления, как вы определили выше, и вы можете использовать синтаксис Html.RenderAction в своем представлении, чтобы фактически перейти и извлечь каждую из частей вашей страницы. Вы бы определили действие на вашем контроллере, в обязанности которого входит заполнение каждой из моделей малого представления и возврат представления для этой модели.

<div id="leftCol">
   @{Html.RenderAction("LeftCol", "Controller");}
</div>
<div id="midCol">
   @{Html.RenderAction("MiddleCol", "Controller");}
</div>
<div id="rightCol">
   @{Html.RenderAction("RightCol", "Controller");}
</div>

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

Второй вариант также является личным фаворитом, поскольку вы можете быстро использовать JQuery для частичной загрузки страницы, если для заполнения и рендеринга этих разделов требуется несколько секунд (если это имеет смысл для вашей страницы). Теперь ваша страница открывается быстро, у вас есть JS-функция, которая отправляет и извлекает эти разделы, помещает над ними небольшую графику загрузки и загружает / отображает с помощью запроса AJAX. Опять же, только если это имеет смысл для вас, но использование методов действия Partial Views / Render обычно дает вам больше гибкости в повторном использовании на сайте и частичном рендеринге AJAX.

...