【问题标题】:Using one controller or multiple controllers for a navigation page menu为导航页面菜单使用一个或多个控制器
【发布时间】:2014-08-18 19:58:20
【问题描述】:

我注意到有些网站对导航页面上的每个菜单项使用单独的控制器。 这是一个例子

如果我的页面上有这样的菜单

  • 消息
  • 个人资料
  • 收件箱
  • 购买的物品

当每个项目被点击时,它会将我带到一个新的控制器,即使我仍然看到页面顶部的菜单 例如。

www.somepage.com/messages
www.somepage.com/profile
www.somepage.com/items purchased

为菜单中的每个项目使用不同的控制器(如上)有什么好处。我正在尝试权衡这里有多个控制器与一个具有不同操作的控制器的优势,如下所示,我是 MVC 的新手

这样更好吗? 1 个控制器(菜单),具有显示菜单不同​​区域的多个操作

www.somepage.com/menu/messages
www.somepage.com/menu/profile
www.somepage.com/menu/items purchased

要记住的最后一件事是,我希望有子菜单项,例如 在菜单/消息中我想要传入/传出,那看起来如何?

www.somepage.com/menu/messages/incoming 
www.somepage.com/menu/messages/outgoing

如果有会更好

www.somepage.com/messages/incoming
www.somepage.com/messages/outgoing

【问题讨论】:

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


    【解决方案1】:

    您可以拥有任意数量的控制器,您绝对应该利用这一点。您应该始终将代码分解为尽可能小的逻辑单元。这适用于每个类,无论是控制器、实体、视图模型等等。 OOP 的黄金法则之一是一个类应该做一件事并且把它做好。你永远不应该拥有一个包含各种完全不相关的功能的大型类,因为控制器只是一个类,它也适用于控制器。

    您的控制器应该只包含处理您的控制器“关于”的一件事的操作。通常,这最终成为一个特定的实体,并反映在控制器的名称中。所以对于消息,你可能有一个MessagesController,所有处理消息的操作都会去那里。但是对于配置文件,您应该创建一个新的控制器,可能称为 ProfileController 并将这些操作放在那里。

    【讨论】:

    • 好的,我将为每个菜单项使用不同的控制器。但是视图呢?每个视图都需要有用于菜单的 html 和 _Layout.cshtml(navigation),所以它们看起来都一样。在这里做什么最好?将菜单放在一个包含 _Layout.cshtml 的共享视图中并让他们都使用它?或者我应该使用局部还是什么?有点新手!
    • 每个局部视图的性能都会受到轻微影响,因此对于站点导航等相对静态的东西,您可能应该直接将其放入布局中。但是,无论哪种方式都可以。
    【解决方案2】:

    这都是一种偏好,但我认为标准将是不同的控制器。

    不同的控制器为您提供默认分隔,如果您使用默认路由,如果您想添加子菜单,它会很好地工作。

    www.somepage.com/profile -- standard profile page
    www.somepage.com/profile/edit -- edit profile page with nice route
    

    当然,如果你将它们全部放在一个菜单控制器中,你当然可以做同样的事情,但是路由会变得有点混乱,或者你必须在路由配置中手动定义你想如何做。

    将它们放在一个控制器中的好处是您在编辑这些特定操作时只有一个地方可以查看/维护(耸耸肩)。

    我个人喜欢每个迷你“部分”的不同控制器,主要是因为它产生了很好的分离,默认路由相当不错,每个控制器可以有不同的依赖关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多