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

Should I use a presenter or a decorator?

由于我是 Rails 世界的初学者,所以我有点迷失了这些术语... 我的 header 中有一些与模型无关的代码。我只想根据页面用户显示或不显示它。 我知道这有点简单,帮助者也会做得很好,但是是否可以将代码放入演示者或装饰器中? 我什么时候必须使用它们?还真没看懂。

tl;博士: 在这种情况下使用 Presenter

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

另一方面,

A Presenter 应该使用您要显示的对象的方法来格式化数据。例如。你有一个 User 模型:

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

并且您想在视图中不带太多逻辑地显示全名。您可以像这样创建 UserPresenter class:

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"