В Asp.net MVC рекомендуется ли производным моделям выводить из доменных моделей?

(Я использую ASP.Net MVC, но это кажется более общим вопросом MVC)

Скажем, у вас есть модель домена, представляющая человека, и у вас есть представление для редактирования персона. В объект Домен Person входит свойство State of Residence, и в представлении вы хотите раскрывающийся список со списком состояний.

Есть ли какая-либо причина не создавать модель представления, которая является производной от модели предметной области и просто включает в себя свойства для остроты пользовательского интерфейса, которые требуются представлению? Если так, то почему бы не захотеть это сделать?

TIA

9
задан John Farrell 23 August 2010 в 22:13
поделиться

4 ответа

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

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

6
ответ дан 4 December 2019 в 14:26
поделиться

Это не рекомендуется, и, поскольку вы просите, не следует этого делать. Короткий ответ - создать уникальную модель представления для каждого представления, которое вы собираетесь визуализировать. Сохраняйте представление 1-1 для отношения просмотра модели, и по мере написания кода вы поймете, почему.

Подробный ответ можно найти здесь, среди других мест http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

Спасибо,

R

7
ответ дан 4 December 2019 в 14:26
поделиться

Нет, вы действительно не хотите этого делать.

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

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

Теперь вам следует предоставить простые средства для генерации ViewModel из объекта домена или для обновления объекта Domain из ViewModel.

2
ответ дан 4 December 2019 в 14:26
поделиться

Я не согласен с большинством приведенных здесь советов.

Я думаю, что ваша доменная модель должна быть чистой, а модель представления делает то, что должна. Если вашему представлению нужен человек и время в Лондоне, я не вижу проблемы в следующем:

ExampleViewModel : Person {
 Public DateTime LondonTime { get; set;}
}

Или

AnotherViewModel 
{
 Public Person SomeGuy { get; set;}
 Public List<Kitty> Cats{ get; set;}
}

Если вашему представлению нужен человек и список котят

Это сохранит ваш домен в чистоте; Время в Лондоне не связано с человеком, однако, на ваш взгляд, вам все равно нужно получить данные. В этом вся точка зрения модели imho.

-1
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: