2011-08-18 65 views
1

我目前正在建立两个自定义验证程序,延伸Zend_Validate_Abstract,分别命名为Lib_Validate_TimeAfterLib_Validate_TimeBetween。这些名称非常简单,第一个用于测试日期/日期时间/时间是否在另一个之后,第二个用于测试日期/日期时间/时间是否在两个其他日期/日期时间/时间之间。Zend_Validate良好的策略,以避免重复的代码

这两项验证器将依靠名为_buildDate($value)它取一个值在datestamp的形式相同的方法,一个hourstamp(无论hh:mmhh:mm:ss),一个timestampISO_8601 timestamp,并将其转换以可用的日期格式。

因为我不想重复自己,并在我的验证器中复制/粘贴该方法,我一直在寻找最好的方法来做到这一点。

我现在正在研究的途径是开发一些我的验证器可以使用的类助手(一种凌乱的做法,因为它添加了依赖关系)或者我可以添加另一层抽象通过构建验证日期/日期时间/时间的其他验证程序,然后扩展我的两个验证程序,因为我可以共享方法_buildDate($value),但后来我不认为我真的需要验证程序。因此,什么是一种好的方法(我不是真的在寻找“做神的方式”)来构造这种代码以避免重复(DRY)?

回答

3

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

这将是灵活的,清晰的,通用的,更少的代码,甚至涵盖一个案例。

+0

哇,我怎么没有想到:P。谢谢你,这是要走的路。 –

+0

不客气。 – markus

0

怎么样一类Lib_Validate_Common它延伸Zend_Validate_Abstract它有你的共同的方法。并且Lib_Validate_TimeAfterLib_Validate_TimeBetween延伸Lib_Validate_Common