2013-08-01 65 views
0

我建立RoR中一個新的應用,並已在過去使用傳統的屬性命名約定。然而,爲了可讀性,我開始考慮使用更多的描述性對象屬性。例如,而不是if user.special_needs == true ...,我能說出屬性「has_special_needs」,然後可以讀取if user.has_special_needs ...我可以命名對象屬性來模擬方法調用嗎?

雖然這使得我的代碼更容易閱讀,它看上去非常類似於一個方法調用,這讓我想可能是混亂和/或我可能會跨過的命名慣例線。經過大量研究,我沒有發現任何選項的可靠論證。由於這也符合數據庫命名約定(我不太瞭解的一個主題),所以我希望得到一些建議。

感謝

+0

如果它是一個方法或不是它有什麼關係?無論如何,它有多可疑?如果它是一種方法,你的用戶是否沒有特殊需求;)? – oldergod

+0

我只是想遵循正確的命名約定,並詢問是否這個跨越是什麼讓你覺得是不是真正擺在首位的方法調用的屬性和方法名 –

+2

之間的界限? –

回答

2

如果需要包紮的東西,這是很容易接受創造這樣的方法:(?)(!)

class MyModel < ActiveRecord::Base 
    ... 
    def has_special_needs 
    self.special_needs == true 
    end 
end 

您還可以使用問號和劉海使代碼更易收斂:

def has_special_needs? 
    self.special_needs == true 
end 

但是在這個特定的例子中user.special_needs是對的嗎?所以你可以使用一個別名:

class MyModel < ActiveRecord::Base 
    alias_attribute :has_special_needs?, :special_needs 
    ... 
end 

# Then: 
if @mymodel.has_special_needs? 
    ... 
end 
+0

這是一個更好的解決方案嗎?不看模型,你仍然無法區分這兩者。在這種情況下別名是否有益? –

+0

如果您不想在所有代碼中「搜索並替換」,我認爲這是最佳解決方案。對於你的屬性和方法,它總是有更好的名字,Ruby代碼應該很容易閱讀。 – Benj

+0

+1表示使用'?'表示布爾方法的ruby約定。 –

相關問題