Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails演示者文件夹的用途是什么?_Ruby On Rails_Ruby_Directory_Mvp - Fatal编程技术网

Ruby on rails Rails演示者文件夹的用途是什么?

Ruby on rails Rails演示者文件夹的用途是什么?,ruby-on-rails,ruby,directory,mvp,Ruby On Rails,Ruby,Directory,Mvp,Rails演示者文件夹的用途是什么?这个文件夹里有什么?为什么需要此文件夹?演示者是一种通常被称为模型视图演示者(MVP)的设计模式 这是模型-视图-控制器模式的派生,用于创建用户界面 它有助于分离关注点,使代码更加枯燥 以下是维基百科的描述 模型-定义要在用户界面中显示或以其他方式操作的数据的界面 演示者-根据模型和视图进行操作。它从存储库(模型)检索数据,并将其格式化以在视图中显示 查看-一个被动界面,显示数据(模型)并将用户命令(事件)发送给演示者,以便对该数据进行操作 Ruby on

Rails演示者文件夹的用途是什么?这个文件夹里有什么?为什么需要此文件夹?

演示者
是一种通常被称为模型视图演示者(MVP)的设计模式

这是模型-视图-控制器模式的派生,用于创建用户界面

它有助于分离关注点,使代码更加枯燥

以下是维基百科的描述

模型-定义要在用户界面中显示或以其他方式操作的数据的界面

演示者-根据模型和视图进行操作。它从存储库(模型)检索数据,并将其格式化以在视图中显示

查看-一个被动界面,显示数据(模型)并将用户命令(事件)发送给演示者,以便对该数据进行操作

Ruby on Rails中的演示者

Presenter是位于模型和视图之间的简单类,提供了一种处理复杂显示逻辑的简单、干练的面向对象方法

在Rails中,约定将它们放在
app/presenters
文件夹中

下面是一篇用户友好的文章,解释了该模式及其在RubyonRails中的使用


演示者文件夹是演示者代码的存放位置。。。我知道,很明显,我会解释。。。我认为Presenter和Decorator是作为模型的抽象,以便在数据属性被赋予视图之前对其进行处理。如果您熟悉帮助程序,那么,演示者在某种程度上类似于帮助程序,因为他们正在为视图准备一些数据,只是帮助程序通常用作所述视图的实用方法,而演示者更多的是显示实际属性

这个链接很好地解释了这种差异:

希望这会有所帮助。

演示者会整理您的视图 当人们在rails上下文中提到演示者时(与模型视图演示者、MVC、MVVM讨论等的讨论相反),他们指的是在您的视图中事情看起来非常复杂的情况:到处都有大量的
if
语句,很难通读

或者用日常生活中的一个比喻:想象一下你有一所非常凌乱的房子,到处都是堆积如山的东西,所以很难穿过。你可以把演讲者想象成一个大车库,在那里你可以整齐地组织一切。这使得你在家里走来走去变得容易多了,而且你仍然拥有你所需要的所有餐具


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

例如,我将使用presenters来确保视图不能执行遍历模型关系的n+1查询。当视图只能访问演示者时,这是一个很好的地方,可以确保通过单个查询加载所需的相关模型,或者防止视图能够完全触发活动记录查询。这里有一个新的引用了那个旧的