当我开始使用.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
你呢?
答案 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等)。这又与项目的复杂性有关。