Я новичок в 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?
}