ASP.NET MVC: соглашение об организации ViewModels

Как обсуждалось в различных вопросах и сообщения в блогах, мы знаем, что макет проекта ASP.NET MVC сильно зависит от соглашений.

Я вслепую сделал подкаталог в папке Controllers.

Это не кажется правильным.

http://www.imagechicken.com/uploads/1252003002097179400.png

Вопрос. Каково общепринятое соглашение о том, в каком каталоге хранить ваши ViewModels? Каковы ваши предложения или общепринятые правила?


person p.campbell    schedule 03.09.2009    source источник


Ответы (3)


Я думаю, идея состоит в том, что (View)Models должны находиться в каталоге Models (который пуст, когда вы создаете новый проект ASP.NET MVC).

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

person Mark Seemann    schedule 03.09.2009

Я использую папку Models вместе с Controllers и Views. Тот самый, который в вашем проекте пуст (я не пользуюсь Areas).

Модель M в MVC идет в отдельной сборке. Единственными моделями в веб-сборке являются модели представления/редактирования.

Внутри папки Models, как обычно, есть подпапки по пространствам имен. Так что я:

Vertex.Data (Сборка с репозиториями и т.п.)

Вертекс.Веб

Controllers
  BarController
  FooController
Models
  Bar
    BarListItem
  Foo
    FooDetail
    FooListItem
Views
  Bar
  Foo
  Shared

...так далее.

person Craig Stuntz    schedule 03.09.2009
comment
+1 Я помещаю и модели, и контроллеры в отдельную сборку, которую отправляю в TDD. - person Mark Seemann; 03.09.2009
comment
Привет, Крейг, мне просто любопытно, как вы используете BarListItem и для какой цели вы его используете? - person Barbaros Alp; 14.01.2010

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

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

Я храню все свои модели представлений в каталоге моделей, созданном в проекте MVC. Эти «модели» сопоставляются один к одному с моими взглядами. Я использую подпапки в папке «Модели», если модели представления становятся чем-то большим, чем просто держателями основных данных. Подпапки будут содержать все биты и фрагменты, необходимые для представления этого представления.

person Kelsey    schedule 03.09.2009
comment
Примерно так я и стал думать о моделях представлений. Нет ничего плохого в совместном использовании моделей между представлениями, но также нет ничего плохого в том, что каждое представление имеет свою собственную модель. Следуя этому подходу, вы можете расширить структуру папок Craig, чтобы в каждой папке Models/{Controller} была папка для каждого действия. В эту папку вы поместите основную модель для действия и любые необходимые подмодели. - person Sean; 20.04.2013