2012-06-14 4 views
9

Ich habe ein Benutzermodell, die Abstimmungsmethoden haben. Ich möchte Proxy-Methoden für die Abstimmung schreiben.Was ist Rails Way? (Lesbarkeit vs Trocknen)

Dies ist lesbare Weise:

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 

Und das ist DRY Art und Weise:

%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 

Welche ist besser und warum?

+4

persönlich, wenn man bedenkt Sie 2 Methoden nur hier haben, und es ist unwahrscheinlich, dass Sie immer mehr hinzufügen würde (vote_sideways? Vote_diagonally?) Ich würde mit dem lesbaren Art und Weise einfach gehen. Wenn Sie möglicherweise viele, viele mehr haben könnten, würde ich mit dem DRY-Weg gehen (weil es leicht erweiterbar ist) mit einem lesbaren Kommentar, der anderen Entwicklern (oder sich selbst später!) Erklärt. – MrDanA

+0

Stimmen Sie mit @MrDanA --- eine andere Frage: Möchten Sie dies in mehr Klassen als nur dieses "Element" verwenden? –

+0

atm MrDanA's Antwort ist besser. ty! – enRai

Antwort

3

rein, weil OP schien mein Kommentar zu mögen, werde ich es als eine Antwort setzen:

persönlich nur, wenn man bedenkt Sie hier 2 Methoden haben, und es ist unwahrscheinlich, dass Sie immer mehr hinzufügen würde (vote_sideways vote_diagonally?) Ich würde einfach mit dem lesbaren Weg gehen. Wenn Sie möglicherweise viele, viele mehr haben könnten, würde ich mit dem DRY-Weg gehen (weil es leicht erweiterbar ist) mit einem lesbaren Kommentar, der anderen Entwicklern (oder sich selbst später!) Erklärt.

2

Weder (sorry).

def vote_count(item,vtype) 
    return false unless can? :vote, item 
    vote item, vtype 
end 

Viel Glück

+0

Die Leute vergessen oft, dass Sie mehr als einen Parameter an eine Methode übergeben kann. – MurifoX

+0

in meinem Fall bekomme ich Rekursion hier – enRai

1

IMHO, in diesem Fall übertrumpft Lesbarkeit trocken. Es scannt schnell und ist leicht zu knacken. Wenn Sie jedoch damit beginnen, Abstimmungstypen hinzuzufügen, kann der zweite Ansatz flexibler sein. YMMV.

0

Beides.

Ich bin mit Anil; Pass einfach in eine Art auf - Metaprogrammierung dieses als First-resort ist yucky.

Das sagte, ich bin ein Fan von Komfort-Methoden - aber sie sollten die generische Methode mit dem Typ aufrufen.

Dies hält die generierte Methode prägnant - die eigentliche Arbeit wird in der generischen Methode durchgeführt, aber der API Benutzer erhält immer noch die gleichen Methoden verwendet.