не по битриксу, но буду рад, если поделитесь опытом.
Есть класс с относительно большим количеством полей, ототбражающих характеристики реального объекта. У каждой характеристики ( в нашем контексте у каждого поля) свой обязательный формат данных.
Провожу заполнение полей объекта класса через методы-сеттеры. Перед каждым сеттером хардкодом валидирую записываемое значение. Некрасиво выходит. Если объект данного класса надо будет в другом месте инициализировать, то и хардкод по валидации задаваемых полей придется копипастить. Задумался. Было бы круто валидацию прямо внутрь сеттеров и разместить. Круто с точки зрения первоначального удобства, но это получатся уже не сеттеры. ООП не одобряет) При этом, данные поля в отрыве от объекта ни как не используются. Выделять каждое поле в свой класс излишне накладно , а ведь в этом случае валидацию можно было бы вызывать из конструкторов классов "характеристик" - то есть, все было бы в лучших традициях ООП. Пока красивее этого варианта не придумал. Еще трейт-хелпер можно создать, содержащий валидаторы для класса. Не оч красиво, но точно лучше, чем хардкод, да и копипасты не будет в будущем.
Надеюсь, получилось выразить мысль понятно, хоть и немного сумбурно) Как бы вы поступили в такой ситуации, где бы разместили код валидаторов для полей класса? Наверняка уже есть паттерн для лакончиного решения этого случая.
немного запутался. Но как вариант можно использовать фабричный метод. Делаете конструктор protected, делаете статический метод ::create() или что-то похожее. Он на вход принимает массив полей, вы внутри метода пробегаетесь по массиву и дергаете нужные сеттеры, а внутри них своя валидация
Если для каждого поля свой сеттер есть, так в сеттере валидацию и проводи. Зачем еще нужен сеттер?
Обсуждают сегодня