Also, wir alle bemühen uns, Verdoppelung (DRY) und andere Gerüche zu reduzieren, und halten Sie unseren Code so schön und sauber wie möglich. Für Ruby-Code gibt es eine Vielzahl von Instrumenten, um Gerüche zu erkennen, zum Beispiel den ganz netten Caliber Service.Umgang mit trivialem "Duplikation von Code" -Geruch in Rails/Ruby
Es scheint jedoch, dass ich eine andere Definition der Code-Duplizierung als die Tools habe. Ich denke, das könnte mit der Ruby-Methode verbunden sein, bei der man fast nie direkt auf eine Variable zugreift, sondern stattdessen durch einen Methodenaufruf. Betrachten Sie diesen Schnipsel aus einem Rails-Controller:
def update_site_settings
SiteSettings.site_name = params[:site_name]
SiteSettings.site_theme = params[:site_theme]
expire_fragment('layout_header')
flash[:notice] = t(:Site_settings_updated)
redirect_to :controller => 'application', :action => 'edit_site_settings'
end
Dies wird mit einer Code-Duplizierung Warnung gekennzeichnet, wegen der zwei Anrufe an den „params“ -Methode. Meine Frage ist also, ob es wirklich eine Verbesserung wäre, die params
einer lokalen Variablen zuzuordnen? Ich betrachte die Art und Weise, wie dies geschrieben wird, als die klarste und prägnanteste Art und Weise, dies zu tun, und die Tatsache, dass params
eine Methode und keine Variable ist, ist einfach "die Kosten des Geschäfts" in Ruby.
Sehe ich das in die falsche Richtung?
EDIT: In diesem Fall könnte eine schönere Art sein, ein SiteSettings.update_attributes(params)
Art-Update zu machen. Überlegen Sie, wenn Sie so wollen, das gleiche Problem in einem anderen Schnipsel:
def update
@mailing_list = MailingList.find(params[:id])
if @mailing_list.update_attributes(params[:mailing_list])
flash[:notice] = t:Mailing_list_updated
redirect_to(mailing_lists_path)
...
Danke Jungs. Ich gehe mit der allgemeinen Antwort von "Verwenden Sie den Geruchsbericht als Richtlinie, und schwitzen Sie nicht jedes Detail". –