В приложении ASP.NET MVC3 ViewModel заполняется сервисным уровнем или контроллером? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть ASP.NET MVC3 в C # и Razor. Архитектура приложения разделена на уровень доступа к данным (классы EF + репозиторий), уровень обслуживания, контроллер, ViewModels и View.

My ViewModel предоставляет метод Fill, который принимает в качестве параметра сбор данных для отображения в View . Чтобы не имел связи между компонентами, метод Fill должен вызываться из Сервисного уровня или из Контроллера ?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Определение: Модель (как в MVC) = Уровень обслуживания (в данном случае)

Контроллер должен быть скомпонован как клей между представлением и моделью. Представление не должно знать о модели и наоборот.

Поэтому ответ на ваш вопрос заключается в том, что контроллер должен содержать всю логику, используемую для перемещения информации из модели в модель представления. Совершенно нормально использовать любой класс из Model внутри модели представления.

Обновление в ответ на комментарии

Как я и сказал. Я понятия не имею, как выглядят ваши классы или что вы должны сделать, чтобы создать навигацию.

  1. Контроллер должен использоваться для сбора информации, требуемой моделью представления
  2. Контроллер не должен иметь никакой бизнес-логики

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

1 голос
/ 17 февраля 2012

Было бы лучше удалить функцию Fill из вашей ViewModel, тогда ViewModel не будет зависеть от вашего уровня данных.

Затем я использовал бы что-то вроде Automapper в контроллере для сопоставления DataObject и ViewModel перед возвратом представления.

ActionMethod:

public ActionResult Edit(int id)
{
    var data = DataRepo.Get(id);
    var viewMode = Mapper.Map<ViewModel>(data);
    return View(viewModel);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...