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,

Другие вопросы по тегам