Принципы СУХОЙ или легкий / тонкий вид в MVC для похожих / унаследованных объектов - PullRequest
2 голосов
/ 20 марта 2012

У меня есть ряд унаследованных объектов, которые очень похожи, только несколько полей различаются между классами. В основе этой иерархии классов лежит абстрактный класс, который содержит множество полей, которые должны иметь все последующие объекты. Примерно так:

abstractBase
  obj1 : abstractBase
    obj2 : obj1
      obj3 : obj2

Представление, которое отображает эти объекты, по сути одинаково для всех них, я просто ввожу новые элементы div для отображения данных, которые отличаются. Поскольку я новичок в MVC, у меня остается только два основных варианта:

Один из подходов заключается в создании строго типизированных представлений для каждого конкретного объекта. Каждое представление будет очень похожим, но с небольшими различиями для основных объектов На мой взгляд, это нарушает принцип DRY, поскольку 90% или более содержимого каждого представления будет повторяться в следующем. Но с другой стороны, взгляды были бы лишены какой-либо существенной логики.

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

if (Model.baseObject is obj3){ render out the special fields }

С другой стороны, я не буду нарушать принцип СУХОЙ, что я считаю хорошей вещью. Но с другой стороны, взгляды будут содержать логику. Насколько я понимаю, это более или менее осуждается.

  • Кто-нибудь был в подобной ситуации?
  • Какой подход вы выбрали?
  • Есть ли другой вариант, который я не видел / не знал?

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Я согласен с выбранным ответом на Сколько логики разрешено в представлениях ASP.NET MVC?

По сути, представления должны служить структурой для отображения данных вашей модели. Следовательно, представление служит своей цели, если структура, которую он создает для отображения конкретной модели, может быть скорректирована на основе данных, содержащихся в модели. Условное отображение элементов в вашем представлении на основе определенных свойств модели, которую предполагается отобразить, является приемлемой практикой.

Если ваше представление содержит логику для изменения данных модели любым способом, это нарушит разделение интересов, которое MVC должен установить.

2 голосов
/ 20 марта 2012

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

...