Rails中的装饰者与助手?

Pau*_*l N 5 ruby-on-rails

我正在努力了解装饰模式.

据我所知,装饰者关心的是"呈现"模型的数据.它们将包含可在视图中调用的方法.

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

MrY*_*iji 24

Rails(内置)组织代码的方式是:胖模型,瘦小的控制器,并将其余部分放在Helpers(或者担心,它们是Helpers但是用于控制器/模型)中.

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

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

装饰:

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

使用Decorator模式将减少胖模型中的代码量(由Rails的内置方式强制执行):

  • 您的模型应该保留业务逻辑,不再受显示逻辑的污染.
  • 你的助手已不再是随处可用的方法大肥堆,而是只定义真正全局帮助方法,如hours_from_datetime(datetime, format = '24'),menu_link(name, path, *args),@user.full_name,等.