使用一个控制器或多个控制器作为导航页面菜单

时间:2014-06-27 16:12:27

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

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

如果我在页面上有一个看起来像这样的菜单

           
  • 消息
  •        
  • 简档
  •        
  • 收件箱
  •        
  • 购买的物品
  •    

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这有点偏好,但我认为标准是不同的控制器。

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

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

当然你可以做同样的事情,如果你把它们全部放在一个菜单控制器中,但是路线有点乱,或者你必须在路线配置中手动定义你想要的方式。

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

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