Подтвердить что ты не робот

Идеальная структура папок для .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

Как насчет вашего?

4b9b3361

Ответ 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

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