【问题标题】:MVC Areas, MvcCodeRouting, both, or some other architecture?MVC 区域,MvcCodeRouting,两者,还是其他一些架构?
【发布时间】:2013-01-11 14:20:38
【问题描述】:

我正在整理一个 MVC 4 项目,该项目可能会在未来几年内广泛发展。有了从头开始的奢侈和挑战,我正在尝试找出路由和组织我的控制器和视图的最佳实践。

MvcCodeRouting NuGet 包很有吸引力,我打算使用它。但是,我不确定使用 MVC 区域是否也是明智的。如果使用 MvcCodeRouting,似乎 MVC 区域是多余的,但我不确定区域提供的额外代码组织是否仍然可取。

为了说明我的意思,让我们以这个虚构的评分应用程序为例。它具有以下高级领域:

  • 公共门户
  • 经过身份验证的学生门户
  • 认证教师门户
  • 经过身份验证的管理员门户

假设每个门户最终都会有 100 个不同的视图(让我们雄心勃勃!)。如果实现了这种规模,MVC 区域似乎是划分代码的好方法,在每个区域中使用 MvcCodeRouting。或者也许我们应该按照我们喜欢的方式组织代码,让 MvcCodeRouting 完成繁重的工作。

因此,Areas 加上 MvcCodeRouting 设计看起来像这样(文件夹结构):

  • MvcWebProject
    • 区域
      • 管理员
        • 控制器
        • 型号
        • 观看次数
      • 公开
        • 控制器
        • 型号
        • 观看次数
      • 学生
        • 控制器
        • 型号
        • 观看次数
      • 老师
        • 控制器
        • 型号
        • 观看次数
    • 内容
    • 控制器
    • 脚本
    • 观看次数

没有区域的 MvcCodeRouting 设计看起来像这样(文件夹结构):

  • MvcWebProject
    • 内容
    • 控制器
      • 管理员
      • 公开
      • 学生
      • 老师
    • 型号
      • 管理员
      • 公开
      • 学生
      • 老师
    • 脚本
    • 查看次数
      • 管理员
      • 公开
      • 学生
      • 老师

在这些设计中隐含的是,MvcCodeRouting 将用于通过命名空间进一步组织类。

在这些设计中,哪种方法更好?为什么?还有另一种更好的方法吗?在一种设计或另一种设计中,在门户之间共享资源是更容易还是更困难?

请注意,这只是整个代码解决方案的前端,因此其背后的整个服务/域/数据库都有自己的特定架构。对于这个问题,我只是对如何在 MVC 中构建这些不同的应用程序领域感兴趣。

【问题讨论】:

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


    【解决方案1】:

    我不会将区域仅用于文件夹组织。使用 MvcCodeRouting 完全不需要区域,因为您可以使用命名空间,而同时使用这两种方法可能会造成混淆。

    让我建议您可以与 MvcCodeRouting 一起使用的其他文件夹结构:

    选项#1

    • MvcWebProject
      • 管理员
        • 控制器
        • 型号
      • 公开
        • 控制器
        • 型号
      • 学生
        • 控制器
        • 型号
      • 老师
        • 控制器
        • 型号
      • 查看次数
        • 管理员
        • 公开
        • 学生
        • 老师
      • 内容
      • 脚本

    选项 #2 在这个上,您可以将 ViewModels 放在与使用它的控制器相同的目录/命名空间中。

    • MvcWebProject
      • 控制器
        • 管理员
        • 公开
        • 学生
        • 老师
      • 查看次数
        • 管理员
        • 公开
        • 学生
        • 老师
      • 内容
      • 脚本

    MvcCodeRouting 没有改变的一件事是 Views 文件夹的位置。

    【讨论】:

    • 谢谢马克斯。我现在很清楚,使用两者充其量只会令人困惑。尝试同时利用两者可能会导致不兼容并引发错误。目前我倾向于使用选项 #2(例如,Controllers/Teacher/Reports/CurveController 将与 Views/Teacher/Reports/CurveDashboard.cshtml 一起使用 - 很好地使用 MvcCodeRouting 命名空间)。
    • 另外,选项#2 生成的命名空间感觉更自然。 Controllers.Teacher.Reports.CurveController 和 Models.Teacher.Reports.CurveModel 似乎比 Teacher.Controllers.Reports.CurveController 和 Teacher.Models.Reports.CurveModel 更符合约定优于配置,从前者开始的意义上说约定和进入域特定名称而不是后者,其中域特定名称被约定名称(例如控制器)打断。
    • 在你这样做之后你会为BeginForm做什么?
    【解决方案2】:

    MvcCodeRouting 能否帮助嵌入/提供其他静态内容,例如 CSS 和 JS 文件?

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 2012-04-28
      • 2020-05-17
      • 1970-01-01
      • 2017-05-22
      • 2015-05-07
      • 1970-01-01
      • 2021-07-05
      • 2012-06-22
      相关资源
      最近更新 更多