我是实施大型应用程序的开发团队的一员。该应用程序有几个层次,我们希望尽可能简化文件的组织,但也遵循最佳实践。
以下是基于MVC约定如何布局的示例。
UIProject
- Controllers
- HomeController.cs
- ErrorController.cs
- PersonalInfoController.cs
- BaseController.cs
...
- Views
- Home
- Index.aspx
- Home1.aspx
- Home2.aspx
- PersonalInfo
- Step1.aspx
- Step2.aspx
- Step3.aspx
...
- Shared
Site.Master
Error.aspx
...
然而,我们已经意识到PersonalInfo的功能已经增长,并且实际上应该分解为多个控制器。我们想将它们组织在Controllers文件夹的子文件夹中。像这样:
Controllers
- HomeController.cs
- ErrorController.cs
- BaseController.cs
- PersonalInfo
- Step1Controller.cs
- Step2Controller.cs
- Step3Controller.cs
可以这样做,这些控制器中的每一个都在PersonalInfo命名空间内。可以使用namespace参数映射Route。
真正的问题在于让MVC找到相关的视图。我找到了两种方法来解决这个问题。一,clanmonroe.com,通过从指定硬编码视图路径的基本控制器继承来处理此问题。另一个是Stephen Walther,更简单地建议在视图调用中提供视图路径。
这两种方法似乎都有效,而且我更偏向于第一种方法。但是,它们有缺点。主要是,我们现在不再强迫公约。也就是说,Step1Controller.cs可能有一个Index Action,但View可以命名为foo.aspx。
理想情况下,我们想要一种使用MVC本地实现有组织的方法的方法,没有奇怪的解决方法。对于这样的情况,或者至少是一个好的推荐,是否有既定的最佳实践?
答案 0 :(得分:2)
这听起来(或多或少)像ASP.NET MVC中的新区域功能。根据{{3}}:
区域提供了一种对控制器和视图进行分组的方法,以允许构建与其他部分相对隔离的大型应用程序的子部分。每个区域都可以作为单独的ASP.NET MVC项目实现,然后可以由主应用程序引用。这有助于在构建大型应用程序时管理复杂性,并促进多个团队一起在单个应用程序上协同工作。
它没有完全按照您的描述实现,而不是控制器中的子文件夹,它希望您将区域拆分为单独的项目。然后,每个区域都可以包含控制器和视图。