ASP.Net MVC - Является ли этот уровень сущности слишком далеко?
У меня есть модель данных домена, которая возвращает класс, такой как следующий:
public class ZombieDeath
{
public virtual int ZombieId {get;set;}
public virtual FatalHit {get;set;}
}
public class FatalHit
{
public virtual int HitId {get;set;}
public virtual string Zone {get;set;}
public virtual string Weapon {get;set;}
}
Передавая эти данные обратно в мои таблицы, я прочитал, что лучше всегда возвращать данные в представления в плоском формате. Итак, у меня есть следующий класс, который представляет строку сетки:
public class ZombieDeathRow
{
public virtual int ZombieId {get;set;}
public virtual int HitId {get;set;}
public virtual string Zone {get;set;}
public virtual string Weapon {get;set;}
}
Итак, когда это отображается, я просто звоню Model.Weapon
, вместо Model.FatalHit.Weapon
, Это делает код представления более приятным для чтения, но это, очевидно, дополнительный уровень работы из-за необходимости отображения.
Это действительно хороший способ работы или просто трата времени?
3 ответа
Я думаю, что есть преимущества в том, что дизайн в домене отличается от дизайна на уровне представления. Таким образом, концептуально вы на самом деле смотрите на две разные модели: одну для уровня домена и одну для уровня представления. Каждая из моделей оптимизирована для своих целей.
Уровень домена предназначен для предоставления представления домена приложения независимо от используемого вами пользовательского интерфейса.
Модель на уровне представления может отличаться в зависимости от того, какую технологию пользовательского интерфейса вы используете или какой клиент используется. Например, модель на уровне представления может выглядеть иначе для MVC, чем для WebForms (и некоторые люди используют оба параллельно). Модель на уровне представления для мобильного устройства может отличаться от модели для браузера, работающего на рабочем столе. Веб-сервис может использовать еще одну модель для эффективной передачи данных. Если вы используете AJAX в своем веб-приложении, вы можете предпочесть еще одну модель для эффективной передачи информации, например, с использованием JSON.
Итак, да, как правило, я бы сказал, что совершенно нормально иметь разные модели, если они помогают вам реализовать вашу систему таким образом, чтобы ее было легко понять и поддерживать. Вы упоминаете, что код представления "намного приятнее читать". На мой взгляд, это достаточно хорошо в качестве причины!
Трата времени ИМО. Вы будете тратить слишком много времени на написание кода отображения на что угодно, кроме самых простых решений.
Где вы читали, что лучше выровнять свою ViewModel? Сложный бизнес-объект, представленный в виде свойства в ViewModel, может не поддерживать полностью инкапсулированный код, но по моему опыту с проектами MVC хорошая модель предметной области означает, что это не будет проблемой, за исключением пуристов.
Вы смотрите на структуру реляционных данных, которую лучше сохранить в 3-й нормальной форме. Из этого кода я не понимаю, почему нужно отделять FatalHit
от ZombieDeath
, Потеряет ли он 3-ю нормальную форму, если объединить их в одном классе? Есть ли у других классов FatalHit
Члены?
Если для представления этих данных необходимы 2 отдельных класса, а третий комбинированный класс используется только для упрощения работы в представлении, я не вижу смысла в третьем классе.