什么定义了 MVC 中的传统“页面”概念?
Posted
技术标签:
【中文标题】什么定义了 MVC 中的传统“页面”概念?【英文标题】:What Defines the Traditional "Page" Concept in MVC? 【发布时间】:2010-10-20 04:14:48 【问题描述】:我目前使用 CodeIgniter 作为我在使用 php 时选择的框架。我正在努力解决的一件事是“页面”的概念,以及如何在 MVC 中正确地表示它。据我所知,CodeIgniter 有一个代表页面控制器的前端控制器。在我的思考过程中,每个页面都有自己的控制器。尽管我经常看到有人使用塞满了许多方法的页面控制器。所以从这个意义上说,每个动作都成为它自己的页面。
我从来没有真正喜欢将许多方法塞入一个控制器的想法,因为如果您一次只需要一个或两个控制器中的方法,似乎会有太多的开销。每个页面都有自己的控制器似乎更合理,并且操作只会对应于您可以在该特定页面上执行的操作。我是不是想错了?
更令人困惑的是,我会注意到在某些 Web 应用程序中,它们将有一个控制器,该控制器将具有多种方法(即登录、注册、查看、编辑等),但在其他应用程序中,它们实际上有一个登录控制器和注册控制器。 “页面控制器”的正确用法是什么?
【问题讨论】:
【参考方案1】:从域的角度来看,我肯定地说每个域上下文有 1 个控制器更有意义。不一定每页一个,但根据上下文可能会出现这种情况。我所说的上下文是“密切相关的行动”。
例如,帐户控制器应处理登录、注册、注销、更改密码、操作。他们都生活在“帐户”的上下文中
以 *** 为例。我将有一个“问题”控制器,它具有诸如 DisplayQuestion、AskQuestion、删除问题、MostRecent Questions 等操作。它们都是由一个控制器管理的不同“视图/页面”。
【讨论】:
【参考方案2】:你说得对,控制器中的每个公共方法都变成了一个“页面”。话虽这么说,它不一定是网页,一个动作可能是数据的发布,然后重定向到另一个动作/页面,因此页面不一定意味着“网页”。
MVC 使用许多约定来使事情正常进行。例如,每个控制器都必须以“Controller”结尾。因此,一组用户页面(创建、编辑、删除等)将位于 UserController 中。在 Views 文件夹中,控制器类中的每个公共方法或操作都成为与控制器前缀匹配的文件夹中的网页(在本例中为用户文件夹)。因此,控制器类中名为“Delete”的操作将指向 User 文件夹中的 Delete.aspx 页面。
将所有这些方法放在一个类中似乎有点尴尬,但它可以很好地根据您的对象组织类似的功能。
【讨论】:
您关于每个控制器必须以“Controller”结尾的观点仅适用于 Asp.Net Mvc 框架,不一定适用于他正在处理的 PHP 框架。【参考方案3】:在 MVC 中,将这三者放在一起就可以得到一个“页面”。模型处理数据层,视图处理用户看到的实际 html,控制器决定它们如何连接在一起以显示所需的数据。我选择对现有控制器使用单独的控制器还是其他方法取决于操作与我拥有的其他控制器的接近程度。假设我想拥有一个 UserAdmin 控制器,现在它很可能会处理添加用户、删除用户、更改密码等。如果我要添加以某种方式更改用户帐户的功能,我很可能会把它在那里。如果我将它们分离到它们自己的控制器中,我自然会添加另一个。控制器允许您将类似的任务放在一起,以便它们可以利用类中已有的内容,而不必重新创建已经完成的内容。很多是程序员认为应该怎么做。对你有意义的东西对我可能没有意义,那是开发人员(或设计师)的选择。
【讨论】:
以上是关于什么定义了 MVC 中的传统“页面”概念?的主要内容,如果未能解决你的问题,请参考以下文章