.NET MVC的理想文件夹结构

Nes*_*tor 35 asp.net-mvc conventions naming-conventions asp.net-mvc-3 asp.net-mvc-2

当我开始使用.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
Run Code Online (Sandbox Code Playgroud)

你的呢?

MJ *_*son 15

我发现它简化了部署,使网站项目只包含内容(没有编译代码).

就像是:

Web.Site项目

   Content
      Images
      Css
   Scripts
   Views
   web.config
Run Code Online (Sandbox Code Playgroud)

并将所有编译的代码移动到另一个项目:

网络项目

   Controllers
   Filters
   Models
   ...
Run Code Online (Sandbox Code Playgroud)

然后,您可以将Web.Site项目中的所有内容视为需要部署,并且所有必需的程序集都将位于Web.Site\bin中.

无论您是进行简单的xcopy部署,还是使用WiX构建MSI软件包,这都会让生活变得更轻松.

  • 我是第二个.我的项目通常由"Web"项目和"Web.Components"项目组织."Web"项目中的代码很少,而"Web.Components"包含控制器和过滤器等所有内容.最后,我有一个包含我模型的"核心"项目. (2认同)

The*_*yce 6

我是第二个项目方法.吉米博加德也有一个很好的帖子(确保通过所有评论).

我个人发现,当我在应用程序的一部分上工作时,我使用相关的服务,控制器,存储库等等.当你将这些文件放在不同的文件夹中时,它会变得乏味来回寻找它们.经过一些游戏,我一直在遵循这种格式:

AppName.Web.UI

Scripts
Content
View
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

测试项目

  ...
Run Code Online (Sandbox Code Playgroud)

我认为这取决于您的项目有多大,以至于您是否进一步分解并使用Interface和ViewModel子文件夹.它并不完美,但我发现它与我的思维方式相比更好.

还可以将您的服务和存储库放入第三个项目(AppName.Core),使AppName.Web.Core项目仅封装Web关联部件(Attributes,Controllers.ViewModels等).这又与项目的复杂性有关.


Ben*_*key 5

只要事情清楚,它就没那么重要了.我认为这只是在您的组织/团队中保持一致的问题.

  • 我知道,但通常你想在开始网站的"连续制作"之前制定标准,并且你想要感觉你的标准是你能想到的最好的.因为几乎整整一天我都花了很少的一致的例子,所以也许我们可以通过分享我们的"建议"结构来节省时间. (2认同)