Местоположение общего класса MVC

Где в структуре папок MVC должны находиться файлы общего класса? Например, у меня есть класс, который определяет правильный DataContext для использования, поэтому я не изобретаю велосипед в каждом из своих контроллеров. Должен ли он жить в папке «Контроллеры», даже если это не контроллер? Должен ли он быть с моделями, потому что это связано с базой данных, даже если это не модель? Возможно, папка Views\Shared? Или Content является универсальной папкой для такого рода вещей? Я уверен, что мог бы поставить его где угодно, но мне было интересно, где находится «правильное» место.


person gfrizzle    schedule 03.02.2009    source источник


Ответы (6)


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

person John Sheehan    schedule 03.02.2009
comment
Вы поместили всю логику своего приложения в проект уровня представления? Звучит ужасно.... - person Jason Bunting; 18.02.2009
comment
Для небольших проектов я помещал его туда. Если сервисы будут повторно использоваться, они получат свой собственный проект. - person John Sheehan; 18.02.2009

Если вы посмотрите на MVC Storefront Роба: отдельный проект библиотеки классов (например, Commerce.MVC.Data)

person dmajkic    schedule 03.02.2009
comment
Дело не в том, чем занимается Роб, а в чем-то большем — это просто стандартный подход к разделению обязанностей и тому подобное. Доступ к данным не имеет никакого отношения к презентационному уровню приложения, если только мы не говорим об одностраничном приложении, где это не имеет особого смысла. - person Jason Bunting; 18.02.2009

Если он может быть полезен сам по себе (подумайте о инструменте командной строки, созданном вокруг него), поместите его в папку «Модели». Если он используется только как помощник для контроллеров, поместите его в папку Controllers.

person mouviciel    schedule 03.02.2009

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

person Al Katawazi    schedule 03.02.2009

Создайте отдельную сборку DataAccess, сделайте этот класс внутренним и назовите его DataContextFactory.

person Andrei Rînea    schedule 04.02.2009

дмайкич,

Зачем выделять его в отдельную область? Если его код BLL, он должен быть в папке контроллера, если его элемент, связанный с DAL, он должен быть в модели. Я могу понять, если проект становится огромным, и вы хотите создать несколько подпапок, это не должно быть проблемой. Но размещение кода на другом уровне действительно противоречит цели MVC, не так ли?

person Al Katawazi    schedule 03.02.2009
comment
Нет. MVC — это шаблон представления. Это относится к уровню представления. Контроллеры должны содержать только логику представления. В классах контроллеров не должно быть бизнес-логики. dmajkic сказал поместить класс в отдельный проект, а не в отдельный уровень. - person liammclennan; 04.02.2009
comment
@liammclennan - Точно, я не знаю, что курит Ал, но, может быть, ему стоит бросить. - person Jason Bunting; 18.02.2009