我应该使用演示者还是装饰者?

时间:2019-06-10 13:32:46

标签: ruby-on-rails-5 decorator presenter

由于我是Rails世界的初学者,我对这些术语有些迷惑... 标头中有一些代码,与模型无关。我只想显示还是不显示,取决于页面用户。 我知道这有点简单,助手也会做得很好,但是是否可以将代码适合演示者或装饰器中? 我什么时候必须使用它们?我真的还不明白。

1 个答案:

答案 0 :(得分:1)

tl; dr : 在这种情况下使用演示者

详细说明装饰器是一种结构设计模式,可以包装其他对象并添加新功能,而无需扩展正在装饰的类。

另一方面,演示者应该使用您要呈现的对象的方法来格式化数据,以使其显示出来。例如。您有一个User模型:

class User < ActiveRecord:Base
  # it has first_name and last_name columns
end

,并且您想在视图中显示全名而没有太多逻辑。您可以像这样创建UserPresenter类:

class UserPresenter
  def initialize(user)
    @user = user
  end

  def full_name
    "#{@user.last_name} #{@user.first_name}"
  end
end

因此,您无需单独调用两个属性,而只需通过演示者完成

user = User.new(first_name: "John", last_name: "Doe")
user_presenter = UserPresenter.new(user)
user_presenter.full_name #=> "Doe John"