Mam model użytkownika, który ma metody głosowania. Chcę pisać metody proxy do głosowania.Co to jest Rails Way? (czytelność vs suszenie)
Jest to czytelny sposób:
def vote_up item
return false unless can? :vote, item
vote item, :up
end
def vote_down item
return false unless can? :vote, item
vote item, :down
end
I to jest suchy sposób:
%w(up down).each do |vtype|
define_method "vote_#{vtype}" do |item|
return false unless can? :vote, item
vote item, vtype.to_sym
end
end
Który z nich jest lepszy i dlaczego?
Osobiście, biorąc pod uwagę, że masz tutaj tylko dwie metody i jest mało prawdopodobne, że kiedykolwiek dodasz więcej (vote_sideways? Vote_diagonally?) Po prostu pójdę w czytelny sposób. Jeśli mógłbyś mieć wiele, wiele więcej, chciałbym pójść w sposób DRY (ponieważ staje się łatwo rozszerzalny) z czytelnym komentarzem do wyjaśnienia innym programistom (lub sobie później!). – MrDanA
Zgadzam się z @MrDanA --- innym pytaniem: czy chcesz użyć tego w więcej klasach niż tylko ten "przedmiot"? –
atm Odpowiedź MrDanA jest lepsza. ty! – enRai