【问题标题】:Zend_Validate good strategy to avoid repetition of codeZend_Validate 避免代码重复的好策略
【发布时间】:2011-08-18 12:47:37
【问题描述】:

我目前正在构建两个扩展 Zend_Validate_Abstract 的自定义验证器,它们分别命名为 Lib_Validate_TimeAfterLib_Validate_TimeBetween。名称非常简单,第一个用于测试日期/日期时间/时间是否在另一个之后,第二个用于测试日期/日期时间/时间是否位于其他两个日期/日期时间/时间之间。

这两个验证器都将依赖名为_buildDate($value) 的相同方法,该方法采用datestamphourstamphh:mmhh:mm:ss)、timestampISO_8601 timestamp 并将其转换为可用的日期格式。

由于我不想重复自己并将该方法复制/粘贴到我的两个验证器中,我一直在寻找最好的方法。

我现在正在研究的途径是开发某种类帮助器,我的验证器将能够使用(一种混乱的做事方式,因为它添加了不必要的依赖项)或者我可以添加另一个抽象层通过构建另一个验证器来验证日期/日期时间/时间,然后在其上扩展我的两个验证器,因为我可以共享方法 _buildDate($value),但是我认为我真的不需要验证器。

那么,有什么好的方法(我并不是真的在寻找“众神之道”的做事方式)来构造这种代码以避免重复(DRY)?

【问题讨论】:

    标签: zend-framework dry zend-validate yagni


    【解决方案1】:

    您可能想要构建一个验证器而不是两个,您可以在其中传入一个 dateBefore 和 dateAfter ,它们都是可选的。如果您只传递 dateBefore,则您的 $value 如果在该日期之后将有效,如果您同时传递两者,则它必须在它们之间,如果您仅传递 dateAfter,则该值必须在该日期之前。

    这将是灵活的、清晰的、通用的、更少的代码,甚至涵盖更多的情况。

    【讨论】:

    • 哇,我怎么没想到:P。谢谢,这是要走的路。
    【解决方案2】:

    Lib_Validate_Common 扩展Zend_Validate_Abstract 有你的通用方法。而Lib_Validate_TimeAfterLib_Validate_TimeBetween 扩展了Lib_Validate_Common

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-07
      • 2020-03-01
      • 2023-01-14
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多