Идеальная структура папок для .NET MVC
Когда я начал работать в .NET Webforms, у меня не было особых проблем с поиском структуры папок, поскольку VS предлагал вам папки приложений, такие как "App_Code", и большинство примеров приложений помещали "BLL", "DAL" внутри и так далее.
Но теперь в MVC каждый проверенный мной пример использует другую структуру, как и никакие стандарты на этот раз, и я не нашел хорошего решения в Google или SO.
Итак, может быть, мы можем поделиться тем, как мы организуем наши проекты MVC, может помочь другим сделать свой собственный разум. Вот структура для небольших и средних проектов, которые я использую:
App_Data
Areas
Admin
Controllers
Models
Views
MyAccount
Controllers
Models
Views
Content
Images
Scripts
Styles
Controllers
HomeController.cs
Helpers
ExtensionMethods // I.e. based on HtmlHelper, use "helper" suffix
MenuHelper.cs // to be called as html.Menu()
Utilities.cs // Other generic (static) libraries, no suffix used
Models
ViewModels // for passing models to Views
RegisterViewModel.cs // use "ViewModel" suffix
Customer.cs // to extend models like adding Model Validation
Repositories
CustomerRepository.cs // use "Repository" suffix
Services
CustomerService.cs // use "Service" suffix, to move code away from controllers
Views
Home
Index.cshtml
Register.cshtml
Shared // Site Layouts (Master templates), also put partials here
SiteLayout.cshtml
Как насчет вашего?
Ответы
Ответ 1
Я нашел, что это упрощает развертывание, чтобы проект веб-сайта содержал только контент (не скомпилированный код).
Что-то вроде:
Проект Web.Site
Content
Images
Css
Scripts
Views
web.config
И переместите весь скомпилированный код в другой проект:
Веб-проект
Controllers
Filters
Models
...
Затем вы можете обрабатывать все в рамках проекта Web.Site, которое необходимо развернуть, и все необходимые сборки будут в Web.Site\bin.
Независимо от того, выполняете ли вы простое развертывание xcopy или используете WiX для создания пакета MSI, это облегчит жизнь.
Ответ 2
Я второй подход к проекту. У Джимми Богарда есть хорошая публикация на подходе (обязательно прочитайте все комментарии).
Я лично считаю, что, когда я работаю над частью приложения, я использую связанные сервисы, контроллеры, репозитории и т.д., и когда вы помещаете каждый из этих файлов в другую папку, это может утомиться взад и вперед и найти их. После некоторых игр я следил за этим форматом:
AppName.Web.UI
Scripts
Content
View
AppName.UI.Core
Attributes
Filters
Formatters
Helpers
Models
Company
Interfaces
IController.cs
IRepository.cs
IService.cs
ViewModels
ViewModel1.cs
ViewModel2.cs
Controller.cs
Repository.cs
Service.cs
User
....
Plugins (mailchimp, Twitter OAuth, etc..)
Global.asax (define all the code here rather than in the UI project)
Проект тестирования
...
Я думаю, что это зависит от того, насколько велик ваш проект относительно того, будет ли вы дополнительно разбиваться и использовать подпапки Interface и ViewModel. Это не идеально, но я нашел, что он лучше мешает, как я думаю.
Можно также сделать так, чтобы ваши сервисы и репозитории вошли в третий проект (AppName.Core), оставив проект AppName.Web.Core, инкапсулирующий только веб-элементы, связанные с частями (атрибуты, контроллеры, ViewModels и т.д.). Опять же, это действительно связано со сложностью проекта.
Ответ 3
Пока это ясно, где вещи, это не имеет большого значения. Я думаю, что это просто вопрос согласованности внутри вашей организации/группы.