【问题标题】:ASP.NET MVC: Grouping classes around controllerASP.NET MVC:围绕控制器分组类
【发布时间】:2012-09-11 22:36:11
【问题描述】:

在asp.net mvc(4)中,开箱即用,视图进入Views文件夹,然后按控制器分组到子文件夹中。

控制器进入Controllers 文件夹,(查看/编辑/输入)模型进入Models 文件夹等。

我确实喜欢视图的组织方式。但是,我不喜欢横向破坏 MVC 的其余部分。

我的问题是,保留视图组织结构的缺点是什么,但按控制器(即按用例)对其他类进行分组。例如:

/Home
  HomeController.cs
  IndexViewModel.cs
  IndexViewModelBinder.cs
/Messages
  MessagesController.cs
  MessagesApiController.cs
  MessagesViewModelBinder.cs
  MessageViewModel.cs
  MessagesListViewModel.cs
/Views
  /Home
     Index.cshtml
  /Messages
     MessagesIndex.cshtml
     MessageDetails.cshtml

【问题讨论】:

  • 这主要是区域的用途。
  • Areas 会将相关组件组合在一起,没错,但您仍然会将 5 个控制器放在一个文件夹中,并将 10 个视图模型放在另一个文件夹中。所以Areas确实缓解了这个问题,但并不等同于我提出的解决方案。

标签: asp.net-mvc asp.net-mvc-4


【解决方案1】:

所有重要的是视图文件的排列,因为它们是在运行时访问的。其他所有内容都编译到程序集中,因此其源文件的物理位置无关紧要。

和你一样,我发现对于大型项目来说,默认安排有点尴尬,所以这就是我对当前项目的布局:

~/
    /Areas
        /DefaultArea // I always use areas, even when there's only one, because it simplifies things when adding additional areas.
            /Controllers
                FooController.cs
            /Views
                /Foo
                    FooView.aspx // Yes, I use WebFormView. Just a matter of personal preference
                    FooEdit.aspx
                    FooModels.cs // this file contains my ViewModels

因此,基本上,我将 ViewModel 类与视图放在同一个文件夹中,而不是将所有 ViewModel 放在一起(这在逻辑上不太合理)。我很想将我的控制器放在他们视图的文件夹中,但我决定不这样做。

到目前为止,我没有发现我的方法有任何缺点(已经使用了将近 2 年了)。

【讨论】:

    【解决方案2】:

    我通常喜欢尽可能避开某些区域,因为这会造成一些路由问题。

    我认为您的结构完全没问题(并且优于基于“类型”而不是“功能”分离代码的默认 MVC/Web 结构)。

    我建议你只将“web”.cs 文件保留在 web DLL 中(例如控制器、ViewModels、Binders 等),并在域/服务/等的单独 DLL 中具有相同的结构层,以便可以根据需要单独重用/测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2012-04-15
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多