208 похожих чатов

Привет, ребята!) Вопрос больше по проектированию и основам ООП возник, а

не по битриксу, но буду рад, если поделитесь опытом.

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

Надеюсь, получилось выразить мысль понятно, хоть и немного сумбурно) Как бы вы поступили в такой ситуации, где бы разместили код валидаторов для полей класса? Наверняка уже есть паттерн для лакончиного решения этого случая.

2 ответов

14 просмотров

немного запутался. Но как вариант можно использовать фабричный метод. Делаете конструктор protected, делаете статический метод ::create() или что-то похожее. Он на вход принимает массив полей, вы внутри метода пробегаетесь по массиву и дергаете нужные сеттеры, а внутри них своя валидация

Если для каждого поля свой сеттер есть, так в сеттере валидацию и проводи. Зачем еще нужен сеттер?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта