Подтвердить что ты не робот

Рекомендации по использованию MVC.. Связывание ViewModel с использованием интерфейсов Пример

Я новичок в ASP.NET MVC 3.0 и пытаюсь создать приложение, используя проект MVC ViewModel.

Мне было интересно, какие лучшие практики являются регрессионными контроллерами для ViewModels и имеют несколько вопросов ниже. Это мое понимание до сих пор (что может быть неправильно).

  • Мы создаем Модели.
  • Создайте ViewModels, создав новый класс и объявляя атрибуты с тем же именем и назовите классы базовых моделей (включая поля ID базовых моделей, которые вы хотите обновить позже.. и классы никак не связаны).
  • Создайте репозиторий для каждой из базовых моделей (чтобы найти и сохранить ect.).
  • Создайте действие Controller для каждой из ViewModels (которые получают доступ к репозиториям базовых классов для извлечения значений и помещают эти значения в ViewModel, а затем передают ViewModel в ViewModels View).
  • Создать представления из ViewModels (представления ViewModel)
  • В методе обновления контроллера ViewModel (POST) получить обновленный объект ViewModel и преобразовать его в базовые объекты модели (возможно, использовать Automapper?), а затем сохранить объекты базовой модели обратно с помощью своих репозиториев и применить привязку как это? "TryUpdate < 'IPerson > (person)", "TryUpdate <' IPlace > (место);" (это выглядит неправильно, цель состоит в том, чтобы вернуть значения в базовые классы из ViewModel, применить привязку, сохранить базовые модели обратно с помощью репозиториев!.. Это не похоже на использование репозиториев. Вместо TryUpdate < 'IPerson > (person), я бы ожидал увидеть что-то вроде этого: person.Save(IPerson).. где "человек содержит значения", ".Save - это репозиторий", а "IPerson содержит атрибуты привязки для использования для привязки"?.. Не уверен, что это правильно.

До сих пор я создал ViewModels, создав новый класс и добавляя атрибуты из разных базовых моделей с использованием тех же имен. На данный момент у меня есть следующие вопросы:

Q1: У каждого ViewModel есть свой собственный контроллер и доступ к каждому из классов репозитория базовых моделей для получения его значений?

Q2: в ViewModel вы должны включить поле идентификатора всех базовых моделей, из которых вы используете атрибуты, учитывая, что вы можете захотеть POST обновления вернуться через контроллер ViewModels в базовый репозиторий моделей (требуется идентификатор значения)?

Q3: Как бы вы привязывали атрибуты с помощью интерфейса для привязки модели к контроллеру, используя хранилище для сохранения.

Мне не удалось найти учебник или ресурс, который объясняет все в пошаговом примере. Полный ответ будет следующим примером:

  • 2x простые модели, 1x простой viewModel, 1x интерфейс для привязки, 1x простой контроллер с использованием класса интерфейса для привязки к обновлению, 1x репозиторий.. i.e.

//Model1

public class Person
{
  int PersonID {get;set;}
  string FirstName {get;set;}
  string LastName {get;set;}
  DateTime DOB {get;set}
}

//Model2

public class Place
{
  int PlaceID {get;set;}
  string Description {get;set;}
  string AreaType {get;set;}
  string PostCode {get;set;}
}

//ViewModel (содержащий атрибуты из моделей)

publc class ViewModel
{
  //Person attributes
  int PersonID {get;set;}
  string FirstName {get;set;}
  string LastName {get;set;}

  //Place attributes
  int PlaceID {get;set;}
  string Description {get;set;}
  string AreaType {get;set;}

  //other attributes
  string someOtherAttributeForDisplay {get;set}
}

//Интерфейс Model1 (для привязки к модели)

public interface IPerson
{
  string FirstName {get;set;}
}

//Интерфейс Model2 (для привязки к модели)

public interface IPlace
{
  string Description {get;set;}
  string AreaType {get;set}
}

//ViewModelController?

{
  //What goes here?
}

//Repository?

{
  //What goes here?
}
4b9b3361

Ответ 1

Я думаю, что вы, возможно, слишком сложное понятие.

Прежде всего, некоторые общие правила:

  • Не используйте TryUpdateModel. Просто не надо.
  • По тем же причинам не используйте какие-либо "автоматические" картографические сопоставления для сопоставления с вашей моделью просмотра для ваших объектов. Автоматическое сопоставление в обратном направлении (от сущности к модели представления) в порядке.

Использование интерфейсов не требуется.

Представленные модели должны быть очень простыми классами, которые содержат только информацию, необходимую для вашего вида. Если ваш взгляд POSTs различает информацию от того, что он отображает, тогда просто создайте другую модель представления для POST.

Мы используем соглашение об именах {Controller} {Action} Model для наших моделей просмотра. Итак, для действия с именем "Список" на контроллере "Post" у нас будет модель под названием "PostListModel".

Наконец, посмотрите мой отзыв здесь Настоящий пример TryUpdateModel, ASP.NET MVC 3