Я новичок в ASP.NET MVC 3.0 и пытаюсь создать приложение, используя дизайн MVC ViewModel ..
Мне было интересно, каковы лучшие практики по обновлению контроллеров для ViewModels, и у меня есть несколько вопросов ниже. Это мое понимание до сих пор (что может быть неправильно) ..
- Мы создаем модели.
- Создайте ViewModels, создав новый класс и объявив атрибуты с тем же именем и типом, что и у классов базовой модели (включая поля идентификаторов базовых моделей, которые вы хотите обновить позже ... и классы никак не связаны).
- Создайте репозиторий для каждой из базовых моделей (чтобы найти и сохранить данные и т. Д.).
- Создайте действие Controller для каждой из моделей ViewModel (которые обращаются к репозиториям базовых классов для получения значений и помещают эти значения в ViewModel, а затем передают ViewModel в представление ViewModels).
- Создание видов из моделей ViewModel (виды ViewModel)
- В методе Обновление контроллера ViewModel (POST) получите обновленный объект ViewModel и преобразуйте его в объекты базовой модели (может быть, используйте Automapper?), А затем сохраните объекты базовой модели обратно, используя их репозитории, и примените привязку следующим образом? "TryUpdate <'IPerson> (person)", "TryUpdate <' IPlace> (place);" (это выглядит неправильно, цель состоит в том, чтобы поместить значения обратно в базовые классы из ViewModel, применить привязку, сохранить базовые модели обратно с помощью репозиториев! .. Похоже, что эти репозитории не используются .. Вместо TryUpdate <'IPerson> (person); я ожидал бы увидеть что-то вроде этого: person.Save (IPerson) .. где «person содержит значения», «.Save - это хранилище» и «IPerson содержит атрибуты привязки, используемые для привязки»? .. Не уверен, что это правильно ..
До сих пор я создал ViewModels, создав новый класс и добавив атрибуты из разных базовых моделей с одинаковыми именами. На данный момент у меня есть следующие вопросы:
Q1: У каждого ViewModel есть собственный контроллер и доступ к каждому из классов репозитория базовых моделей для получения его значений?
Q2: в ViewModel следует включить поле идентификатора всех базовых моделей, из которых вы используете атрибуты, учитывая, что вы можете отправить POST обновление через контроллер ViewModels в хранилище базовых моделей (требуется идентификатор) значения)?
В3: Как бы вы связали атрибуты, используя интерфейс для привязки модели в контроллере, используя хранилище для сохранения.
Мне не удалось найти учебник или ресурс, который объясняет все в пошаговом примере. Полный ответ будет следующий пример:
- 2х простых моделей, 1x простой viewModel, 1x интерфейс для привязки, 1x простой контроллер, использующий класс интерфейса для привязки при обновлении, 1x репозиторий .. т.е.
// 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?
}
// Репозиторий
{
//what goes here?
}