Rails中的装饰者与助手?

时间:2017-08-02 18:14:36

标签: ruby-on-rails

我试图了解装饰模式。

据我所知,装饰师关注的是“呈现”。模型的数据。它们将包含可在视图中调用的方法。

到目前为止,我会在Helpers或模型中抛出类似的方法(如果需要在模型实例上调用它们)。装饰器和助手之间的主要区别在于装饰器与特定模型相关联,而助手可以是更通用的实用方法(如日期助手等)?

1 个答案:

答案 0 :(得分:17)

滑轨' (内置)组织代码的方法是:胖模型,瘦小的控制器,并将其余部分放在助手(或者担心,助手,但是对于控制器/模型)中。

帮助者(IMO)的最大问题:

  • 可以在任何视图中访问它们。是的,您的应用程序的每个帮助程序中定义的所有内容都可以在视图中找到...
  • 它们是模块:它们无法实例化,因此您只调用它们的方法提供参数。我讨厌看display_full_name(@user)。 "自然方式" (IMO再次)将是@user.full_name(我们不会说"告诉我你的出生日期,Marc" " Marc ,告诉我你的出生日期"

装修:

  • 基本上,它们包装模型的实例并提供显示目的的方法。装饰者不应该修改数据,只需安排数据,复数,翻译,添加逗号,显示货币和价格等。装饰对象及其数据。
  • 它们绑定到特定的对象(不仅是模型实例,还可以将Decorator用于Plain-Old-Ruby-Object,例如UserRole或Country)。 / LI>

使用Decorator模式将减少胖模型中的代码量(由Rails和内置的做事方式强加):

  • 您的模型应该保留业务逻辑,不再受显示逻辑的污染。
  • 你的助手不再是任何地方可用的大量方法,而只是定义真正的全球帮助方法,如link_to_icon(icon_name, *args)hours_from_datetime(datetime, format = '24')menu_link(name, path, *args)等等。