Zend_Validate хорошая стратегия, чтобы избежать повторения кода - PullRequest
1 голос
/ 18 августа 2011

В настоящее время я создаю два пользовательских валидатора, расширяющих Zend_Validate_Abstract с именами соответственно Lib_Validate_TimeAfter и Lib_Validate_TimeBetween.Имена довольно просты: первое используется для проверки, если дата / дата / время наступает после другого, а второе используется для проверки того, находится ли дата / дата / время между двумя другими дата / дата / время.

Оба этих валидатора будут полагаться на один и тот же метод с именем _buildDate($value), который принимает значение в виде datestamp, hourstamp (либо hh:mm, либо hh:mm:ss), timestamp или ISO_8601 timestamp и преобразовать его в пригодный для использования формат даты.

Поскольку я не хочу повторяться и копировать / вставлять метод в оба моих валидатора, я искал лучший способ сделатьit.

Возможности, которые я сейчас рассматриваю, состоят в том, чтобы разработать некоторый класс помощника по классам, который мои валидаторы могли бы использовать (довольно грязный способ делать вещи, так как он добавляет ненужные зависимости), или я мог бы добавитьдругой уровень абстракции путем создания другого валидатора, который проверяет дату / дату / время, а затем расширяет мои два валидатора, так как я мог бы использовать метод _buildDate($value), но тогда я не думаю, чтоВы действительно нуждаетесь в валидаторе.

Итак, что было бы хорошим способом (я на самом деле не ищу "Путь богов" делать вещи) для структурирования такого рода кода, чтобы избежать повторения (DRY)

Ответы [ 2 ]

3 голосов
/ 18 августа 2011

Возможно, вы захотите создать один валидатор вместо двух, где вы можете указать dateBefore, dateAfter, которые оба являются необязательными.Если вы передадите только dateBefore, ваше значение $ будет действительным, если оно после этой даты, если вы передадите оба, они должны быть между ними, а если вы передадите только dateAfter, значение должно быть до этой даты.

Это будет гибкий, понятный, универсальный код с меньшим количеством кода и даже охватит еще один случай.

0 голосов
/ 18 августа 2011

Как насчет класса Lib_Validate_Common, который расширяет Zend_Validate_Abstract, который имеет ваш общий метод. А Lib_Validate_TimeAfter и Lib_Validate_TimeBetween расширяется Lib_Validate_Common.

...