2011-08-18 138 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