ruby-on-rails-5 - 我应该使用演示者还是装饰者?
问题描述
因为我是 Rails 世界的初学者,所以我有点迷失这些术语......我的标题中有一些代码,与模型无关。我只想根据用户所在的页面显示或不显示。我知道这有点简单,助手也会做得很好,但是是否可以将代码放入演示者或装饰者中?我什么时候必须使用它们?我还真不明白。
解决方案
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"
推荐阅读
- r - 通过 sjPlots tab_model 和 emmeans contrast 函数调整后来自同一 LMM 的不同调整 p 值?
- python-3.x - 在 Pandas 中对不同的组和多列应用不同的功能
- r - 从包含星期数、星期几的数据框中获取日期(yyyy-mm-dd)
- openlayers-3 - api3.geo.admin.ch v 3.6.0 OpenLayers 3 DragBox 在使用 firefox 时不显示在地图上(在 chrome 和 IE edge 上运行良好)
- android - 我想设置字段值以使用 Volley RequestQueue 但不起作用
- flutter - Flutter、NestedScrollView 和包裹体效果
- json - 合并从 Json 文档生成的两个 JSON Schemata
- python - 在 Micropython 中以文本分隔符格式保存文件
- php - 在实体中创建子对象而不需要额外的 SQL 表
- c# - 如何使用实体框架正确填充表