2017-01-25 27 views
-1

我有以下的服務類在Ruby中:在Ruby/Rails中使用長方法名是一個糟糕的實踐嗎?

class EnableUserMatriculations 

    def initialize(user) 
    @user = user 
    end 

    def call! 
    matriculations_that_current_user_is_matriculated_and_confirmed.each do |matriculation| 
     matriculation.enable! 
    end 
    end 


    private 

    def matriculations_that_current_user_is_matriculated_and_confirmed 
    # some logic to search user.matriculations that must be enabled 
    end 
end 

我想知道,如果名稱很長的方法是一個不好的初步實踐?

我不喜歡使用評論。

請給我這方面的意見。

+0

「我不喜歡使用評論。」爲什麼?如果不好的做法,那就是不喜歡使用評論。 –

+2

類名也不經常包含動詞。 –

+0

我試圖遵循這些方法: (無評論)=> https://signalvnoise.com/posts/3250-clarity-over-brevity-in-variable-and-method-names (服務名稱與動詞)=> http://blog.sundaycoding.com/blog/2014/11/25/my-take-on-services-in-rails/ – Nonato

回答

0

你應該重新命名這個方法,但不僅是因爲長度。您正在將方法名稱本身的邏輯連接起來,例如尋找被錄取和確認的錄取通知書。如果隨着時間的推移還有另外一種情況需要處理,例如未經處理的入學考試或其他情況?或者你只需​​要處理剛剛確認的預科課程?現在你需要改變邏輯和重命名方法,而不是僅僅改變一個方法內部的邏輯。您不希望call!包含其應該啓用的預約的邏輯,這是因爲方法名稱本身包含的邏輯。

在這種情況下,我改變你的長期方法名像

def matriculations_ready_to_enable 
    user.matriculations.matriculated.confirmed 
end 

然後添加這些範圍的方法到你的錄取模式。您可能希望對用戶使用單獨的方法,而不是使用user.matriculations.matriculated.confirmed,但這樣可以清楚地瞭解需要哪種類型的入學註冊,並將該信息僅包含在代碼的一部分中。

關於長度本身,Ruby通常傾向於使用較短的方法名稱而不是較長的方法名稱,但也傾向於使用完整的單詞與縮略語。 def destroy_matriculations vs def dstry_matriculations

+0

感謝您的回覆。在我的情況下,確定必須啓用哪些註冊的邏輯取決於其他模型信息,例如發票,付款...因此,我將此邏輯保留在特定的ServiceClass中。這是錯誤的? – Nonato

+0

不,這對於保持這個特定服務類中的邏輯來說是完全正確的。我建議保持這種方法的邏輯,而不是方法名稱本身。 – chrismanderson

+0

我也想知道,「準備啓用」是多餘的,因爲「就緒」可能就足夠了,或者考慮到這種方法的簡單性,如果甚至是必要的。 – tadman

0

是的,這是一個不好的做法。描述他們做什麼的名字是很好的,但是當他們變得太長時,他們會使代碼非常難以閱讀。在這種情況下,您已經在UserMatriculations的範圍內,因此您可以輕鬆地將您方法中的前兩個單詞刪除爲current_user_is_matriculated_and_confirmed。無論如何,前面的兩個單詞對名稱沒有多大的影響。我試圖想到與它們存在的上下文相關的名稱。如果名稱變得太長,它也可能會告訴我關於上下文複雜性的一些有用信息。

(另外我想說的是,這些建議適用於大多數,如果不是所有的編程語言 - 不僅僅是Rails的)

+1

我認爲'current_user_is_matriculated_and_confirmed'意味着布爾結果與返回一系列預科。 – chrismanderson

+0

@chrismanderson我也是這樣解釋的,它意味着一個邏輯測試。它返回一個範圍需要仔細閱讀內部。 – tadman

相關問題