2011-10-31 31 views
2

(A)所示:這些rails 3.1驗證哪個更好?

validates :network_id,    :numericality => true 

    validates :direct_url,    :presence => true 

    validates :domain_name,    :presence => true 

    validates :merchant_id,    :numericality => true 

    validates :is_paid_merchant,  :presence => true 

    validates :is_top_merchant,   :presence => true 

    validates :last_months_revenue,  :presence => true, 
             :numericality => true 

    validates :name,     :presence => true, 
             :length => { :maximum => 50 } 

    validates :primary_category_id,  :numericality => true 

    validates :url,      :presence => true 

    validates :url_tag,     :presence => true, 
             :length => { :maximum => 45 } 

-OR-

(B)是這樣的:

validates :network_id, 
      :merchant_id, 
      :last_months_revenue, 
      :primary_category_id,  :numericality => true 

    validates :direct_url, 
      :domain_name, 
      :is_paid_merchant, 
      :is_top_merchant, 
      :last_months_revenue, 
      :name, 
      :url, 
      :url_tag,     :presence => true 

    validates :name,     :length => { :maximum => 50 } 

    validates :url_tag,     :length => { :maximum => 45 } 

在每個字段都有它自己的只會驗證子句所述第一殼體和所述第二它基於正在驗證的內容(具有多次驗證的字段會多次出現)。第一種情況也是按字母順序排列的,所以對於跳到特定領域有一些幫助。

- 或 -

(C)我只是太肛門固關於我的代碼是如何讀取和外觀?

回答

2

我覺得第一個樣式是由於以下原因,更好:

這是最有可能的是你「記」有一個特定的字段名的驗證工作時 - 或編輯一個 - 或添加新的驗證了那個領域。因此,列出每個字段,然後列出每個字段的所有驗證的系統很適合閱讀。

其他風格 - 組驗證一起往往會導致在一個地方看到一個字段,但必須搜索並滾動以查找該字段的其他驗證 - 而且很有可能您不會看到或瞭解對該字段的其他驗證可能是「屏幕外」,因此錯過了。

在開始構建應用程序時(第一種樣式實際上看起來更容易),但在添加,刪除或更改字段和驗證時前進(也就是「真正的應用程序構建世界!「)如果給定字段的所有驗證都在一起,那麼它會更容易,更不容易出錯。

爲什麼B)是壞的另一個例子...... 想象一下:

validates :network_id, 
      :merchant_id, 
      :last_months_revenue, 
      :primary_category_id,  :numericality => true 

    validates :network_id, 
      :direct_url, 
      :domain_name, 
      :merchant_id, 
      :url, 
      :url_tag,     :presence => true 

    validates :network_id    :uniqueness => true 

瞭解如何領域重複所有的地方? 現在想象一下刪除network_id - yuch! 現在想象添加另一個需要數字性,唯一性和存在性的_id字段 - yuch!

另一個例子 - 人們可能會認爲(好吧,我很久以前就已經做過了),我會把所有需要的東西組合在一起,然後對它們進行一個很好的評論,然後對所有不合要求的評論標題標籤對於他們所有人來說,等等。所以開發者需要遵循一個「標準」。像這樣的方法(除了之前的評論)的問題是,這是其他程序員(當前和未來)需要理解的'本地'標準,然後...希望...遵循。就像我自己喜歡它們一樣,像這樣的個人標準通常會導致技術債務,除非有明確的想法。

1

對我來說更好的是A.一個屬性的聲明不是多餘的,而是清晰的。

2

我個人更喜歡第一種風格。因爲我不得不通讀30行代碼來了解在單個字段上設置了哪些驗證。

+0

「因爲我不得不通過30行代碼來了解在單個字段上設置了哪些驗證。」這足夠令人信服!哈哈 – Hopstream