2

所以我处于一种情况,我必须决定是否为一段特定的代码设置一个单独的控制器。我们有一个主页,它就像网站其余部分的中心一样。所有用户(登录和未登录)都可以访问该页面。我正在考虑将其home作为一个单独的控制器和一个名为index. 考虑到这种情况,我开始怀疑这方面是否有任何规则或指导方针。

我的看法是,如果代码围绕实体旋转,则需要分离。(类似于 REST 指南)如果实体是名词,它应该是控制器。如果实体是动词,它可能应该是一个动作,并且应该驻留在名称与动词所指名词相同的控制器中。一些同事建议,既然这是一个动作,它应该驻留在一些现有的控制器中,并且应该命名为home. 我强烈反对,但是,我找不到可以支持我的可靠来源。

想知道你的想法。

4

3 回答 3

1

在这种情况下,我必须同意你的同事。

正如您所说,在处理资源时,REST 是一种不错的方法。这使您可以创建一致的界面,尤其是在创建 Web 服务方面。

但是 REST 实际上并不能很好地映射到 Web 浏览器设置。例如,您会注意到,即使对于资源,您的 /edit 和 /new 操作也只是返回指向相关 RESTful 操作的 HTML 表单的 GET 请求。'edit' 和 'new' 根本不是 RESTy。

同样,主页通常是各种数据的用户友好合并,不适合 RESTful 界面。因此,要么通过一个动作插入一个额外的控制器,要么使用现有控制器的“列表”动作作为主页

于 2009-05-12T10:12:54.913 回答
0

问题从这句话开始

如果实体是动词

如果您尝试生成 RESTful 架构,则实体不能是动词。如果您使用 HTTP,则唯一允许的动词是 GET、PUT、POST、DELETE、HEAD、OPTIONS。所有实体都应映射到某个名词,如果您尝试检索该实体,则应使用动词 GET。就个人而言,我会将其映射到控制器上的 Get() 方法,但我不知道 Rails 是否允许您这样做。

于 2009-05-12T14:48:49.557 回答
0

快速(且无益)的答案是任何一种方式都可以正常工作。

我认为每个人都会在某一时刻遇到这个决定,而您做出的决定取决于网站可能的未来......这意味着它很容易过早优化......但这总是问题,

正如您现在可能已经猜到的那样,“家”在某些方面既是动词又是名词,这就是为什么您难以弄清楚该做什么的原因。

答案取决于您对网站结构的解释以及您可以使用多少时间...

如果您没有多少时间来处理这个......那么将“家庭”动作填充到另一个控制器中通常被认为是权宜之计。它有效,它可以让你转移到其他(可能更有效率)的任务上。

然而,我同意有时候退后一步想想你在做什么以及它是否可以做得“更好”是件好事……在这种情况下,虽然很难定义“更好”——因为不太可能把新控制器中的 home 动作会明显更快......如果它是控制器中唯一的动作......从架构上讲,将其添加到现有控制器中是否更好是值得商榷的......

因此,我们从主要是哲学辩论开始……换句话说,没有一个答案会比另一个“更正确”——这更多的是品味和环境问题。在这种情况下,争论的焦点在于使结构更加 RESTful。

为了忠实于 RESTful 架构,您确实会将操作移动到它自己的控制器中……但您首先必须确定实体是什么。“主页”通常不容易识别为特定的数据库实体......它更常见的是门户页面。

有时您可以选择一个实体,例如在线商店通常会有一个实际上是“products#index”变体的主页,或者有时“主页”页面是 UserAccount#show 页面......但更多情况下,您的主页将并不简单,并且会结合来自多个实体的信息......因此很难决定“正确”的架构是什么。

如果您无法识别特定实体,那么关于是否将操作移至特定控制器存在有效辩论。

但是,您始终可以创建一个以站点架构为中心的新“实体”。如果您要为网站提供其他非实体特定页面(例如 T&C 或“关于我们公司”页面),这种情况尤其可能发生。

通常的后备是“PageController”(或类似名称),它不链接到 Active Record模型,而是链接到更模糊的实体,在这种情况下,是网站用户可识别的“页面”(例如“主页”和“T&C 页面”和“关于页面”)。每个操作都针对特定页面...

因此,这取决于您是否更适合您对系统架构的看法......以及是否值得努力......但这是我对辩论的看法。:)

于 2010-09-15T10:40:43.967 回答