Лучше ли иметь класс валидатора, который имеет такие методы, как validateUrl(), validateEmail(), validateInt() и т. Д.? Или, класс URLValidator, класс EmailValidator и класс INTValidator?Как создать класс Validator в отношении SRP?
ответ
Хотя я согласен с тем, что это в первую очередь мнение основано, я думаю, что у вас должен быть один класс на валидатор. В противном случае, какова единственная ответственность вашего класса? Сделать все проверки? Как и было предложено, вы можете начать с Validator
, который сделал все и переместился в сторону отдельных классов позже, или ваш валидатор мог просто быть фасадом для всей проверки с конкретной проверкой в отдельных классах.
Что касается статического вопроса, это, вероятно, будет зависеть от того, что вам нужно заглушить эти валидаторы в своих тестах. В этом случае их статичность будет больной.
Я думаю, было бы лучше разделить общую логику проверки (класс Validator
) и конкретную логику проверки (класс ValidationRule
и его потомки). Это имеет место в рамках Symfony.
Способ построения наиболее активно используемые правил валидации в Validator
класса используются в рамках Laravel, но я действительно не нравится, потому что это нарушает SRP и делает Validator
класса раздутого с несвязанной логикой.
Я бы сказал, что это прежде всего мнение. Я думаю, вы должны сделать что-то, что является самой простой или самой логичной для вас. – SuperDJ
@SuperDJ Мнение? Я просто хочу знать дизайн по принципу SRP. Если вы так говорите, ответственность основана на мнениях? В любом случае, какой из них вы предпочитаете? –
Я сделал 1 класс, чтобы выполнить все проверки только для того, чтобы сохранить папку классов немного чище. Но поскольку у каждого программиста свой собственный преподобный стиль, я не могу сказать, что в любом случае это правильно или неправильно. – SuperDJ