首页 > 解决方案 > 我应该使用演示者还是装饰者?

问题描述

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

标签: ruby-on-rails-5decoratorpresenter

解决方案


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

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

另一方面,Presenter 应该使用您正在呈现的对象的方法以您想要显示它们的方式格式化数据例如。你有一个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"

推荐阅读