2015-06-06 6 views
1

Лучше ли иметь класс валидатора, который имеет такие методы, как validateUrl(), validateEmail(), validateInt() и т. Д.? Или, класс URLValidator, класс EmailValidator и класс INTValidator?Как создать класс Validator в отношении SRP?

+2

Я бы сказал, что это прежде всего мнение. Я думаю, вы должны сделать что-то, что является самой простой или самой логичной для вас. – SuperDJ

+0

@SuperDJ Мнение? Я просто хочу знать дизайн по принципу SRP. Если вы так говорите, ответственность основана на мнениях? В любом случае, какой из них вы предпочитаете? –

+0

Я сделал 1 класс, чтобы выполнить все проверки только для того, чтобы сохранить папку классов немного чище. Но поскольку у каждого программиста свой собственный преподобный стиль, я не могу сказать, что в любом случае это правильно или неправильно. – SuperDJ

ответ

0

Хотя я согласен с тем, что это в первую очередь мнение основано, я думаю, что у вас должен быть один класс на валидатор. В противном случае, какова единственная ответственность вашего класса? Сделать все проверки? Как и было предложено, вы можете начать с Validator, который сделал все и переместился в сторону отдельных классов позже, или ваш валидатор мог просто быть фасадом для всей проверки с конкретной проверкой в ​​отдельных классах.

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

0

Я думаю, было бы лучше разделить общую логику проверки (класс Validator) и конкретную логику проверки (класс ValidationRule и его потомки). Это имеет место в рамках Symfony.

Способ построения наиболее активно используемые правил валидации в Validator класса используются в рамках Laravel, но я действительно не нравится, потому что это нарушает SRP и делает Validator класса раздутого с несвязанной логикой.