MVC范例。为什么只有application_controller?

4
Rails使用MVC模式。在模型、视图和控制器中,只有控制器有一个“应用”或父控制器。实际上,Rails中有一个application_helper,但它并没有多大作用。为什么只有应用程序控制器有一个父级,而模型和实践中的helpers没有呢?

2
有趣的辩论开始了,+1 - apneadiving
3个回答

4

模型有一个父类,ActiveRecord::Base。 ApplicationController存在是因为在Web应用程序中,需要应用范围的过滤器来进行身份验证/授权等操作非常常见。再次提醒,应用程序助手是为了放置被整个应用程序使用的助手方法,超出了仅限于一个控制器的范围。


我认为Active::Record更像是一个mixin而不是父类,尽管它确实继承了一些东西。 - thenengah

3

模型是MVC框架中最紧密并且应该是最独立的实体。在这种情况下,将模型与控制器进行比较并不好。

帮助程序是支持视图的一些内容。例如,您可能会在视图中编写一些实际的Rails代码,这些代码可以在不同的视图中重复使用。对于这些情况,帮助程序能够提供帮助。

控制器理应在视图和底层模型之间发挥作用。将所有控制器的父级逻辑放在应用控制器中实现是合理的。

Rails MVC框架中的所有类都有一个父级 - ActiveRecord :: Base是模型的父级,ActionController :: Base是控制器的父级。由于帮助程序是针对视图的,因此它们没有至少明确地指定父级。


1

一般而言,谈到MVC而非具体的Rails:

通用控制器是有益的,正如所述,对于所有控制器通用处理,它在特定控制器之前执行。同样适用于模型,因为可能存在一些通用属性,模型可以从中受益。这通常可以通过继承更好地实现,其中您的模型继承了“应用程序模型”。

这就是为什么你经常看到通用控制器,但不是模型。已经有一种方法在模型中获得通用行为,但在控制器中并非如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接