我应该使用演示者还是装饰者?
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"
由于我是 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"