因此,我們都努力減少重複(DRY)和其他異味,並儘可能保持我們的代碼儘可能地乾淨整潔。對於Ruby代碼,有很多工具可以檢測氣味,例如相當不錯的Caliber服務。如何處理Rails/Ruby中瑣碎的「重複代碼」異味
但是,似乎我對代碼重複的定義不同於工具。我認爲這可能與Ruby的做事方式有關,你幾乎從不直接訪問變量,而是通過方法調用。從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
這被標記,因爲兩次調用「PARAMS」的方法與代碼重複警告。所以我的問題是,將params
分配給本地變量真的是一種改進嗎?我認爲這樣寫的方式是最明確和簡潔的方式,而事實上,在Ruby中,params
是一種方法而不是變量,這很簡單「做生意的成本」。
我看到這是錯誤的方式嗎?
編輯:在這種情況下,一種更漂亮的方式可能是做一個SiteSettings.update_attributes(params)
樣式更新。在另一個片段考慮,如果你願意,同樣的問題:
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)
...
謝謝你們。我將以「使用氣味報告作爲指導,並且不會爲每一個細節出汗」作爲一般答案。 – 2010-02-20 13:07:35