【问题标题】:What is the best way to refactor validation logic and regular expressions in rails?在 Rails 中重构验证逻辑和正则表达式的最佳方法是什么?
【发布时间】:2011-08-22 02:49:13
【问题描述】:

假设您有几个模型,其中包含地址、邮政编码、省/国家、电话号码等字段。

这些是具有特定正则表达式验证的相当常见的字段。如果您在每个模型中放置相同的验证和正则表达式,则它是重复的。此外,测试是重复的。这是一种气味;)

使用 ruby​​ 和 rails 重构这些类型的东西的最佳方法是什么?一个模块?

在带有 Hibernate 的 Java 中,我们使用 Component 类来存储地址,然后我们将验证逻辑放在那里。每个想要使用地址的模型都只包含一个地址,它将获得所有地址验证逻辑。

在 Rails 中实现相同目标的方法是什么?谢谢!

【问题讨论】:

  • 您的模块想法对我来说似乎是正确的。我会创建一个具有适当功能的模块,然后将其混入。
  • 您还可以考虑将地址列移动到单独的表中并使用多态关联(即belongs_to :addressable, :polymorphic => true
  • 您甚至可能想要创建自己的类,而不是模块。
  • 我可以在不制作单独表格的情况下创建地址模型吗?制作表格似乎有点过头了,并且会引入不必要的性能问题。该解决方案基本上反映了基于 java 的方法
  • 普通的旧 Ruby 对象而不是模型呢?

标签: ruby-on-rails ruby regex validation refactoring


【解决方案1】:

为您需要的各种类型的验证构建自定义验证器,然后在您的模型类中调用它们。

例如:

类 PostalCodeValidator

现在在每个模型类和作为邮政编码的每个属性中使用该验证。例如,如果您的客户有一个属性 postal_code:

类客户 true 结尾

有更多细节和许多花哨的选项,所以我建议在 Rails 自定义验证器上进行 Google 搜索。

【讨论】:

  • 是否值得将实际字段也重构为模块或类似的东西?例如...地址、邮政编码和省 ID 基本上总是组合在一起。
  • 您是要为该模块添加一些重要的功能,还是仅将其用作一种结构?如果我有两个以上使用这些字段的类组合在一起并且有多个方法与该组相关联,我会这样做。 imo 的决策标准是您实际上是在简化事情还是只是增加复杂性。
  • 好的,我会做简单的事情,直到不再那么明智;)谢谢
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2014-08-24
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
相关资源
最近更新 更多