Модель ввода и модель представления для представления редактирования CRUD - PullRequest
4 голосов
/ 21 апреля 2011

Для каждой сущности в моем хранилище у меня есть модель представления и модель ввода. Я считаю, что наличие модели ввода для хранения реляционных идентификаторов (в отличие от внешних объектов) упрощает рендеринг списков выбора, но какую модель вы передаете в представление «Правка» для рендеринга, Модель представления или Модель ввода

Пример действия POST для Category объекта:

[HttpPost]
public ActionResult Edit(CategoryInputModel inputModel)
{
    // map inputModel to entity and persist
    // ...
}

Просмотр модели:

[HttpGet]
public ActionResult Edit(int id)
{
    var category = _unitOfWork.CurrentSession.Get<Category>(id);
    var viewModel = Mapper.Map<Category, CategoryViewModel>(category);
    return View(viewModel);
}

В этом случае форма редактирования представления позаботится о предоставлении правильных полей модели ввода для действия POST.

Модель ввода:

[HttpGet]
public ActionResult Edit(int id)
{
    var category = _unitOfWork.CurrentSession.Get<Category>(id);
    var inputModel = Mapper.Map<Category, CategoryInputModel>(category);
    return View(inputModel);
}

Что легче поддерживать в долгосрочной перспективе?

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Я сейчас использую модель ввода, которая не содержит идентификатор.Я сохраняю идентификатор объекта в качестве параметра действия, например:

[HttpPost]
public ActionResult Edit(Guid id, CategoryInputModel inputModel)
{
    var category = _categoryRepository.Get(id);
    // do mappings from inputModel to category and save
    // ...
}
2 голосов
/ 21 апреля 2011

Я использую ту же ViewModel, когда экраны детализации / редактирования одинаковы.

Но, как вы заметили, когда экраны разные, я использую InputModel, я называю их FormModels.

Я считаю ViewModels действительно дешевым в обслуживании с AutoMapper. Использование .AssertConfigurationIsValid () (я забыл точное имя метода) сразу же сообщает вам, что не синхронизировалось между объектами домена / бизнеса и моделями формы / представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...