MVC2 Модель связана с дизайном вопрос - PullRequest
0 голосов
/ 03 июня 2011

Я работаю в приложении asp.net MVC2 и у меня есть вопрос, связанный с дизайном модели. У меня есть файл edmx, в котором есть все сущности. У меня есть viewmodel с именем whiteoutviewmodel, который использует три списка сущностей и три другие коллекции, такие как:

public class WhiteoutViewModel
    {
        public List<Entities.Server> Servers { get; set; }    
        public List<Entities.Whiteout> Whiteouts { get; set; }
        public List<Entities.Field> Fields { get; set; }

        public ArrayList Hours {get;set;}
        public ArrayList Minutes {get;set;}
        public ArrayList AMPM {get;set;}
        public ArrayList RepeatList{get;set;}
    }

Я создал вид, основанный на этой модели. Теперь мне нужно частичное представление, которое должно быть типа Отключения Я создал класс whiteout и добавил в него некоторые свойства.

  public class WhiteoutDTO
    {
        public int WhiteoutId { get; set; }
        public int FieldId { get; set; }

        public int StartHour { get; set; }
        public int StartMinute { get; set; }
        public string StartTime { get; set; }

        public int EndHour { get; set; }
        public int EndMinute { get; set; }
        public string EndTime { get; set; }

        public string Repeats { get; set; }
        public bool IsActive { get; set; }

        public enmDays Days { get; set; }
    }   

Теперь у меня есть два класса Whiteout. Один из edmx и тот, который я создал. Нужно ли мне частично создавать вид edmx или тот, который я создал? Причина, по которой я создал свой класс, заключается в том, что мне нужны некоторые свойства, которых нет в таблице / edmx whiteout. Должен ли я сделать свой класс whiteout как свойство выше ViewModel?

[EDIT]

У меня есть модель просмотра со списком отключений (edmx), и мне также нужен один Whiteout, чтобы моя модель просмотра могла выглядеть так:

public class viewmodel {   
    // of edmx entity type
    public List<Entities.Whiteout> Whiteouts { get; set; }   
    // of my DTO type where my DTO has some properties which are not in edmx whiteout entity   
    public WhiteoutDTO myWhiteout {get;set;} 
}

также я хочу, чтобы мой основной вид типа Whiteouts был где мой частичный вид типа myWhiteout. Это возможно и является хорошей практикой. Могу ли я передать свой белый из основного вида в частичный вид, где основной вид имеет тип Whiteouts.

Прямо сейчас у меня есть частичное представление, как это:

Html.RenderPartial("WhiteoutList", Model); 

Пожалуйста, предложите

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Я стараюсь полностью отделить представление от всего, что связано с доступом к данным, и это включает в себя все, что генерируется ORM.

Вы хотите, чтобы ваши взгляды были настолько глупыми, насколько это возможно. ViewModels существуют только для того, чтобы дать вашему представлению только то, что ему нужно, а взамен предоставить вам некоторую информацию о некоторых введенных пользователем данных.

Представьте на секунду страницу входа, У вас есть пользователь, сгенерированный Entity Framework, а затем вам нужен какой-то объект-посредник, который будет передавать данные назад и вперед из вашего представления. При этом вам не нужно создавать строго типизированное представление для вашего сгенерированного класса User из Entity Framework.

Вам нужно создать LoginUserViewModel с достаточным количеством информации, чтобы представление могло войти в систему пользователя и отправить информацию обратно на сервер для аутентификации и авторизации.

Проблема и уродливый код, который имеет место, состоит в том, что вам теперь нужно вручную сопоставить свойства из LoginUserViewModel с User.

То, что вы можете сделать, это использовать что-то вроде AutoMapper , что делает вещи намного чище и проще.

т.е.

AutoMapper.Mapper.Map<AccountLoginViewModel, User>(accountLoginViewModel, user);
0 голосов
/ 03 июня 2011

Вы можете расширить модель, используя частичный класс:

Public partial class Whiteout{

    Public string NewStringProperty{get;set;}

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