.NET MVC的理想文件夹结构

时间:2010-12-05 08:02:08

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 naming-conventions conventions

当我开始使用.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

你呢?

3 个答案:

答案 0 :(得分:15)

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

类似的东西:

Web.Site项目

   Content
      Images
      Css
   Scripts
   Views
   web.config

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

网络项目

   Controllers
   Filters
   Models
   ...

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

我是第二个项目方法。 Jimmy Bogard也有nice post on the approach(确保完成所有评论)。

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

<强> 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项目仅封装Web关联部件(Attributes,Controllers.ViewModels等)。这又与项目的复杂性有关。