哪些导轨3.1验证更好?

时间:2011-10-31 11:17:24

标签: ruby-on-rails ruby ruby-on-rails-3 validation

(A)像这样:

  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 }

在第一种情况下,每个字段都有自己的validates子句,第二种情况是基于验证的内容(多次验证的字段多次出现)。第一种情况也是按字母顺序排列,因此跳转到特定字段会更有帮助。

-OR -

(C)我是否过于肛门保持我的代码如何读取和看起来?

3 个答案:

答案 0 :(得分:2)

我个人更喜欢第一种风格。因为我必须阅读30行代码才能找出在单个字段上设置的验证。

答案 1 :(得分: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 - 你好! 现在想象一下,添加另一个需要数字,唯一性和存在感的_id字段 - 你好!

另一个例子 - 有人可能会想(好吧,我很久以前就已经做过),我会将所有'需要的'组合在一起,然后对它们进行一个很好的评论,然后是所有的独特性,并带有注释标题标签所有这些,等等。所以开发人员可以遵循“标准”。像这样的方法的问题(除了之前的评论)是这是一个“本地”标准,其他程序员(当前和未来)需要理解,然后......希望......跟随。就像我自己喜欢它们一样,除非经过深思熟虑,否则像这样的个人标准往往会导致技术债务。

答案 2 :(得分:1)

对我来说更好的是A.一个属性的声明不是多余的,而是明确的。