Rails Presenters文件夹是用来干什么的?

15

Rails的Presenters文件夹是用来干什么的?

哪些内容需要放进这个文件夹中?

为什么需要这个文件夹?

3个回答

11

presenters 是一种常被称为 Model View Presenter(MVP) 的设计模式。

它是 Model View Controller 模式的一种派生形式,用于创建用户界面。

它有利于关注点分离,使代码更加DRY。

以下是维基百科对其的描述:

model - 定义在用户界面中显示或执行其他操作的数据的接口。

presenter - 对 model 和 view 进行操作。它从仓库(即 model)中检索数据,并将其格式化以在 view 中显示。

view - 一个被动接口,用于显示数据(即 model)并将用户命令(事件)路由到 presenter 来处理该数据。

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter

Ruby on Rails 中的 Presenters

Presenters 是简单的类,位于 model 和 view 之间,并提供了一种良好的、DRY 的面向对象方式来处理复杂的显示逻辑。

在 Rails 中,惯例是将其放置在 app/presenters 文件夹中。

这里有一篇有用的文章,介绍了该模式及其在 Ruby on Rails 中的使用:

https://kpumuk.info/ruby-on-rails/simplifying-your-ruby-on-rails-code/


2
作为一个例子,我将使用Presenter来确保视图不能执行n+1查询遍历模型的关系。当视图只能访问Presenter时,这是一个很好的地方,可以通过单个查询加载所需的相关模型,或者完全防止视图触发Active Record查询。 - Jonah

6

Presenters文件夹是您的Presenter代码所在的位置。我知道,很明显,我会解释。

我认为Presenters和Decorators的方式是将Model抽象化,以便在将数据属性提供给视图之前对其进行整理。

如果您熟悉helpers,那么Presenters在某种程度上类似于helpers,因为它们正在为视图准备一些数据,但helpers通常用作所述视图的实用程序方法,而presenters更多地涉及呈现实际属性。

这个链接很好地解释了区别: https://awead.github.io/2016/03/08/presenters/

希望这有所帮助。


链接失效了。 - Stefan Collier
1
是的,看起来是这样。这里有一个新的参考那个旧的 https://awead.github.io/2016/03/08/presenters/ - rii

2

Presenter简化视图

当人们在rails上下文中提到Presenter时(与Model-View-Presenter,MVC,MVVM等讨论不同),他们指的是视图中看起来非常复杂的情况:到处都是if语句,很难阅读。

或者采用日常比喻:想象一下你有一个非常乱的房子,到处堆满了东西 - 以至于很难走路。您可以将Presenter视为一个大车库,您可以在其中整齐地组织所有内容。这使得您更容易穿过房子,而且仍然拥有所有需要的器具。

回到rails上下文:Presenter允许您将所有复杂逻辑移动到其他地方:移到Presenter文件夹中,因此当您阅读视图时,从更高的层次来理解将会更容易。混乱不在那里,复杂性也不在那里:它已被转移到其他地方。如果您想要更多详细信息,则必须转到相关文件夹。逻辑不必包含在名为“Presenters”的文件夹中,但可以按照惯例放在那里。


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