ViewModel объектов в EF модели преобразования объектов где? - PullRequest
3 голосов
/ 18 января 2011

В настоящее время у меня есть хранилище на основе сущностей Entity Framework v4 (реализованы операции CRUD и GET).Я нахожусь в процессе создания соответствующих моделей просмотра для этих объектов.Где я должен поместить преобразование / отображение между ними?В контроллере или изменить хранилище, чтобы выполнить сопоставление в его методах и вернуть обратно (или принять) типизированные объекты View Model?

Должен ли я сделать это

    public ActionResult Index()
    {
        var person = new PersonRepository().Get();

        var personViewModel = new PersonViewModel();
        personViewModel.InjectFrom(person)
            .InjectFrom<CountryToLookup>(person);

        return View(personViewModel);
    }

или это

     public ActionResult Index()
        {
            var personViewModel = new PersonRepository().Get(); // returns object of type PersonViewModel

// and move this to repository
//            var personViewModel = new PersonViewModel();
//            personViewModel.InjectFrom(person)
//               .InjectFrom<CountryToLookup>(person);

            return View(personViewModel);
        }

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Я бы извлек его в приватный метод на контроллере или поместил бы в класс обслуживания, если он будет использоваться в других местах.

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

1 голос
/ 18 января 2011

Я бы никогда не поместил код трансформации в ваш репозиторий.

  • Репозитории абстрагируют доступ к данным от других проблем.Представления резюме
  • Форматирование пользовательского интерфейса из других соображений.

Смешивание двух - это просто отбрасывание всей вашей тщательной развязки.

Книжное определение MVC настоятельно подразумевает преобразованиедолжно быть выполнено внутри контроллера:

" Контроллер получает входные данные и инициирует ответ, совершая вызовы на объектах модели. Контроллер принимает входные данные от пользователя и инструктирует модель и область просмотра выполнять действия на основеэтот вход."

...