Если мне нужно извлечь объект из связующего элемента пользовательской модели, должен ли связующий элемент взаимодействовать с уровнем сервиса, уровнем хранилища или ...?

StackOverflow https://stackoverflow.com/questions/1119928

Вопрос

Если у меня есть класс, похожий на этот:

public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public Pet myPet { get; set; }
}

Когда я создаю пользовательскую модель binder, сообщение из моей формы не будет отправляться в виде Pet, оно будет отправлять данные, подобные этому:Имя пользователя:"Мое первое имя" Фамилия:"Мое последнее имя" моего питомца:"Имя моего файла"

Поскольку передается имя питомца, а не сам объект Pet, объект Pet необходимо извлечь из model binder.

Мой вопрос в том, должен ли model binder взаимодействовать с уровнем сервиса, уровнем хранилища или он даже должен извлекать Pet?Проблема с уровнем сервиса заключается в том, что у меня, похоже, нет доступа к ModelState при инициализации сервиса:((this.ModelState) выдает мне ошибку)

_petService = new PetService(new ModelStateWrapper(this.ModelState));

Если мне нужна привязка модели для создания объекта Person, то Питомцу нужно было бы как-то назначить...как я должен это сделать?

Это было полезно?

Решение

Что я делаю, так это использую модель представления вместо привязки к бизнес-объектам.Помните, что ваши пользователи могут вводить недопустимые значения, и вам нужно будет повторно отобразить эти недопустимые значения пользователю, предлагая ему исправить свои ошибки.Но ваши "реальные" бизнес-объекты, вероятно, не будут принимать недопустимые значения.Таким образом, модель представления должна допускать любой пользовательский ввод, даже ввод, который бизнес-объекты не будут принимать.

Это упрощает привязку.Вам не нужно обращаться к репозиторию для привязки, только при обновлении бизнес-объекта с помощью (допустимого) пользовательского ввода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top