Quindi, tutti noi ci sforziamo di ridurre la duplicazione (DRY) e altri odori e mantenere il nostro codice il più bello e pulito possibile. Per il codice Ruby, ci sono molti strumenti per rilevare gli odori, ad esempio il bel servizio Caliber.Come gestire il banale odore di "duplicazione del codice" in Rails/Ruby
Tuttavia, sembra che io abbia una diversa definizione di duplicazione del codice rispetto agli strumenti. Penso che questo potrebbe essere collegato al modo in cui Ruby fa le cose, in cui non si accede quasi mai direttamente a una variabile, ma attraverso una chiamata al metodo. Considerate questo frammento da un controller di Rails:
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
Questa è fermato in posizione con un avvertimento di duplicazione di codice, a causa delle due chiamate al metodo "params". Quindi la mia domanda è, sarebbe davvero un miglioramento assegnare il params
a una variabile locale? Considero il modo in cui questo è scritto per essere il modo più chiaro e conciso per farlo, e il fatto che params
sia un metodo e non una variabile è semplice "il costo di fare business" in Ruby.
Sto vedendo questo nel modo sbagliato?
MODIFICA: In questo caso, un modo più carino potrebbe essere quello di fare un aggiornamento di stile SiteSettings.update_attributes(params)
. Si consideri, se si vuole, lo stesso problema in un altro frammento:
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)
...
Grazie ragazzi. Vado con la risposta generale di "usa la relazione degli odori come linea guida e non preoccuparti di ogni dettaglio". –