2010-01-19 54 views
1

我是实施大型应用程序的开发团队的一员。该应用程序有几个层次,我们希望使文件的组织尽可能容易维护,但也要遵循最佳实践。ASP.Net MVC 2文件组织;视图和控制器

下面是一个如何根据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命名空间中。路由可以使用命名空间参数映射。

真正的问题来自MVC找到相关的视图。我找到了两种方法来解决这个问题。其中一个是clanmonroe.com,它通过从指定硬编码视图路径的基本控制器继承来处理这个问题。另一种方法是Stephen Walther,更简单地建议在视图调用中提供视图路径。

这两种方法似乎都有效,我更偏向于第一种方法。但是,它们有缺点。主要是,我们现在不再强迫这个公约。也就是说,Step1Controller.cs可以有一个Index Action,但View可以被命名为foo.aspx。

理想情况下,我们希望有一种方法可以使用本地MVC实现有组织的方法,而不需要奇怪的解决方法。对于这样的情况是否有一个确定的最佳实践,或至少是一个好的建议?

回答

2

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

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

它没有像你描述的那样完全实现,而是在控制器中的子文件夹,它希望你将你的区域拆分成独立的项目。然后每个区域都可以包含控制器和视图。

+0

谢谢。我们之前已经给了一些地区一些考虑,但是不确定它会如何运作,以及它将如何“标准化”。然而,经过进一步审查,似乎它应该很好地完成这项工作。 – Justin 2010-01-19 22:09:17

相关问题