【问题标题】:ASP.NET MVC - putting controller & associated views in the same folder?ASP.NET MVC - 将控制器和相关视图放在同一个文件夹中?
【发布时间】:2010-12-29 00:49:25
【问题描述】:

我们目前正在为我们的 MVC 应用程序使用默认文件夹结构,并且想知道是否可以将控制器及其相关视图放入同一个文件夹中。

例如,我们当前结构的一个子集是:

 Model folder
   OrderViewModel.cs
 Views folder
   OrderView.aspx
   OrderGrid.ascx
   OrderHeader.ascx
 Controllers folder
   OrderController.cs

期望:

 Order folder
   OrderController.cs       
   OrderGrid.ascx
   OrderHeader.ascx
   OrderViewModel.cs
   OrderView.aspx

我们有数百个操作/视图,目前它们被分组到太少的控制器中。这部分是因为在视图及其相关类之间来回切换时在项目中导航变得很痛苦。上述解决方案将允许专注于一个控制器操作的开发人员轻松访问所有这些操作。

我想区域也可以帮助解决这个问题,但我们必须制作大约 100 个区域(每组密切相关的屏幕一个)才能从我团队的 POV 中使用它。

【问题讨论】:

    标签: asp.net-mvc model-view-controller architecture


    【解决方案1】:

    默认的控制器工厂使用反射来查找从Controller派生的所有类,因此无论您将它们放在哪个文件夹中,只要它们是公共的并且从Controller派生它就可以工作。但是恕我直言,将视图和控制器混合到同一个文件夹中并不是一个好主意。如果是组织控制器的问题,为什么不在Controllers 文件夹中创建子文件夹?

    【讨论】:

    • 谢谢。问题是我们的开发人员在 Views 文件夹和 Controllers 文件夹(以及其他文件夹,例如 ViewModels 和 Mappers,我将通过任何一种方式合并)之间来回切换感到很恼火。他们希望将它们放在一个地方,以便他们可以在与动作相关的所有内容之间快速切换。他们来自网络表单背景,所以我可以在一定程度上理解。他们喜欢 ASP.NET MVC,但对无法立即找到内容感到恼火。
    • 在动作方法和它的视图之间有一个快捷方式。这样可以更容易找到东西。如果您右键单击操作方法并选择“转到查看”。您可以从视图中右键单击并选择“转到控制器”,它会将您带到该视图的默认控制器。键盘快捷键 ctrl & M 然后 ctrl & G 也是如此。
    • 很好的提示,Richard - 这将减轻一些痛苦(至少在我说服我的老板花一些钱购买 Resharper 许可证之前)
    • “但是恕我直言,将视图和控制器混合到同一个文件夹中并不是一个好主意。” - 为什么?
    • 回复:“混合视图和控制器不是一个好主意。”意识到这里有两个不一致的系统维度,架构和业务。最初的发布者希望将处理某个业务问题的所有部分保存在一个地方。默认的 ASP.NET MVC 布局将单个业务关注点分散开很多,以便架构上相似的类可以保持在一起。在这两种选择之间,我宁愿将事物按业务关注点进行分组,而不是按架构关注点。
    【解决方案2】:

    我不确定脱离惯例是个好主意,因为人们可能已经习惯了标准的文件夹布局 - 但我确实感受到了你的痛苦。

    如果 Visual Studio 拥有更多IntelliJ IDEA 中的功能,文件之间的导航将不会那么痛苦。

    事实上,随着更多文件被添加到项目中,几乎任何文件夹结构都会随着时间的推移而退化,而更好的工具通常是解决问题的更有效解决方案。

    公平地说,VS2010 似乎开始吸收一些 IntelliJ 的想法,所以情况可能会有所改善 - 但要赶上微软还有很长的路要走。

    编辑:我忘了提到有一个 plugin 为 Visual Studio 提供了更多功能 - 几乎将它提升到与 IntelliJ 相同的水平

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多