ASP.Net MVC 2文件组织;视图和控制器

时间:2010-01-19 19:04:13

标签: asp.net-mvc-2 routing

我是实施大型应用程序的开发团队的一员。该应用程序有几个层次,我们希望尽可能简化文件的组织,但也遵循最佳实践。

以下是基于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本地实现有组织的方法的方法,没有奇怪的解决方法。对于这样的情况,或者至少是一个好的推荐,是否有既定的最佳实践?

1 个答案:

答案 0 :(得分:2)

这听起来(或多或少)像ASP.NET MVC中的新区域功能。根据{{​​3}}:

  

区域提供了一种对控制器和视图进行分组的方法,以允许构建与其他部分相对隔离的大型应用程序的子部分。每个区域都可以作为单独的ASP.NET MVC项目实现,然后可以由主应用程序引用。这有助于在构建大型应用程序时管理复杂性,并促进多个团队一起在单个应用程序上协同工作。

它没有完全按照您的描述实现,而不是控制器中的子文件夹,它希望您将区域拆分为单独的项目。然后,每个区域都可以包含控制器和视图。