2016-01-06 7 views
3

Просто начать работу с MVC, давным опытом WebForms.MVC: Контролер знает о постоянстве?

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

Так что я экспериментирую с ViewModels, которые обертывают или другими способами взаимодействуют с реальными объектами в моей системе. Мне не нравится, как контроллер должен знать, чтобы запросить репозиторий, а затем создать экземпляр ViewModel, чтобы обернуть объект, который он получил.

Что лучше всего подходит для управления контроллером с помощью ViewModels без необходимости знать, как они сохраняются? Все примеры, которые я вижу, напрямую связаны с EntityFramework или другими ORM.

Я думал о статических методах в классах ViewModel, которые принимают ссылку IRepository и идентификатор для загрузки и возврата ViewModel. Имеет ли это смысл?

ответ

1

Используйте DependencyInjection для передачи вашего репозитория в контроллер.

public HomeController 
{ 
    private readonly IHomeRepository repo; 

    public HomeController(IHomeRepository repository) 
    { 
     repo = repository; 
    } 
} 

Затем в ваших методах действий получите предметы и создайте свои ViewModels из этих объектов.

public ActionResult Index() 
{ 
    // IEnumerable models are bad, but this is just a quick demo. 
    var viewModels = repo.GetWidgets().Select(w => new WidgetModel(w)); 

    return View("Index", viewModels); 
} 
+1

Как лучше всего контролировать контроллер, чтобы узнать, как ViewModels связаны с объектами, и получить объект из ViewModel для его сохранения? – n8wrl

+1

Да, задача контроллера - получить данные и передать их в представление. Взгляд только знает о моделях. Вы не хотите, чтобы модель выполняла эту работу, потому что тогда вы загрязняете то, что предназначено для показа бизнес-логики. Ваши модели должны быть как можно более легкими. – krillgar

+1

Я согласен с тем, что ViewModels тоже не должен знать ... Я думаю, поскольку контроллер управляет представлением модели, имеет смысл знать, откуда взялась эта модель. Спасибо! – n8wrl

Смежные вопросы