Zend_Validate хорошая стратегия, чтобы избежать повторения кода
Я в настоящее время строю два пользовательских валидатора, которые расширяются Zend_Validate_Abstract
которые названы соответственно Lib_Validate_TimeAfter
а также Lib_Validate_TimeBetween
, Имена довольно просты: первое используется для проверки, если дата / дата / время наступает после другого, а второе используется для проверки, если дата / дата / время находятся между двумя другими датой / датой / временем.
Оба этих валидатора будут полагаться на один и тот же метод с именем _buildDate($value)
которые принимают значение в форме datestamp
, hourstamp
(или hh:mm
или же hh:mm:ss
), timestamp
или ISO_8601 timestamp
и преобразовать его в пригодный для использования формат даты.
Так как я не хочу повторяться и копировать / вставлять метод в оба моих валидатора, я искал лучший способ сделать это.
Возможности, на которые я сейчас обращаюсь, заключаются в том, чтобы разработать некий класс помощника по классам, который смогут использовать мои валидаторы (довольно грязный способ работы, так как он добавляет ненужные зависимости), или я мог бы добавить другой уровень абстракции, создав другой валидатор, который проверяет дату / дату / время, а затем расширяет мои два валидатора, так как я мог бы поделиться методом _buildDate($value)
Но тогда я не думаю, что мне действительно нужен валидатор.
Итак, что было бы хорошим способом (я на самом деле не ищу "Путь богов" делать что-либо), чтобы структурировать такой код, чтобы избежать повторения (СУХОЙ)?
2 ответа
Возможно, вы захотите создать один валидатор вместо двух, где вы можете передать dateBefore, dateAfter, которые оба являются необязательными. Если вы передадите только dateBefore, ваше значение $ будет действительным, если оно после этой даты, если вы передадите обе, они должны быть между ними, и если вы передадите только dateAfter, значение должно быть до этой даты.
Это было бы гибко, понятно, универсально, меньше кода и даже охватывало бы еще один случай.
Как насчет класса Lib_Validate_Common
который расширяется Zend_Validate_Abstract
который имеет ваш общий метод. А также Lib_Validate_TimeAfter
а также Lib_Validate_TimeBetween
продолжается Lib_Validate_Common
,