所以我迈出了第一步,在我的rails应用程序中使用Presenters,我只是在看一些代码的重构。我有几个字段显示电话号码(即电话,手机和传真)格式良好或显示“无给定”。显然我最初在视图中有这个,但将逻辑移到我的演示者。在那里,我注意到它是完全相同的,所以重构为一个使用方法名称和发送函数的私有方法:
class CustomerPresenter < BasePresenter
presents :customer
def phone
format_number(__method__)
end
def cell
format_number(__method__)
end
def fax
format_number(__method__)
end
private
def format_number(method)
hande_none customer.send(method) do
h.number_to_phone(customer.send(method), :area_code => true)
end
end
end
然而这段代码似乎仍然不干净。因为format_number使用方法名称,所以我似乎必须定义三个单独的方法。如果我能在这里做更多的事情,我很好奇。
P.S。 hande_none只是返回块,如果有东西或返回“none given”
答案 0 :(得分:0)
我通常避免将实际的getter / method / attributes名称与用于格式化它们的方法混合起来。
这就是我使用*_formatted
后缀的原因:使用一般后缀,你可以使用一个简单的method_missing
来引导你:
class CustomerPresenter < BasePresenter
presents :customer
private
def format_number(method)
hande_none customer.send(method) do
h.number_to_phone(customer.send(method), :area_code => true)
end
end
def method_missing(method_name, *args, &block)
case method_name
when /(.*)_formatted$/
#here you could create the method on the fly to avoid method missing next time
return format_number( $1 )
end
super(method_name, *args, &block)
end
end
基本上,我在我的BasePresenter中使用*_currency_format