2012-06-15 5 views
1

Я пытаюсь понять ViewModels глубже, и я прочитал много статей и блогов относительно ViewModel в MVC. В некоторых статьях говорится, что модель не должна ссылаться на ViewModel, но в некоторых других статьях предлагается использовать модель в качестве члена viewmodel.Модель в виде ViewModel

Давайте возьмем пример, когда мне нужно создать ViewModel на основе модели. Я мог бы возможно сделать это двумя способами:

public class Car 
{ 
     public int Year {get;set;} 
     public string Make {get;set;} 
     //more properties...... 
} 

public class CarViewModel 
{ 
    public CarViewModel(Car model) 
    { 
    Model = model; 
    } 

    public Car Model { get; set; } 
//additional view model specific properties 
} 

Или 2.

public class Car 
{ 
     public int Year {get;set;} 
     public string Make {get;set;} 
     //more Car properties...... 
} 

public class CarViewModel 
{ 
     public int Year {get;set;} 
     public string Make {get;set;} 
     //more Car properties...... 

    //additional view model specific properties 
} 

Я просто интересно, какой из них правильный способ создания ViewModel. Или есть другой способ сделать это вообще?

ответ

2

Я бы пошел на второй подход, когда модель Car является постоянным данными, заявив, что это класс, созданный Entity Framework. В этом случае я не хочу, чтобы эти модели плавали в контроллерах и представлениях. Я создам модель представления, эквивалентную тому, что вы сделали, и используйте инструмент, например AutoMapper, чтобы отобразить свойства.

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

Модели с основным видом помогают вам поддерживать чистоту своих бизнес-моделей в материалах UI и помогают избежать моделей, в которых есть элементы базы данных, плавающие в представлениях и контроллерах. Таким образом, вы можете использовать два подхода в зависимости от сценариев.

Надеюсь, это ответит на ваш вопрос.

+0

Спасибо @Mark !! Я заключил, что: Создать оболочку ViewModel, если представление нуждается в дополнительной информации, чем содержится в модели, и создать новый класс ViewModel, если для представления требуется меньшее количество свойств модели? –

+0

Еще одна вещь заключается в том, что вы должны создать модель представления, когда у вас есть модели, созданные Entity Framework, LinqToSql и т. Д. Без использования моделей просмотра и при непосредственном использовании этих классов у вас появятся проблемы, такие как исключение сериализации и другие вещи из-за наличия ленивой загрузки/круговые ссылки, поэтому в этих случаях также следует использовать модели просмотра. – VJAI

+0

Отлично! это имеет смысл. Большое спасибо. –

Смежные вопросы