класс пользователя с полями имя, фамилия итд. Для каждого поля есть свой собственный геттер.
Считается ли дурным тоном внутри класса обращаться к полям напрямую, а не через геттеры?
Например, если я пишу метод getFullName(), могу ли я прописать в нем
return $this->lastName . ' ' . $this->firstName;
или же следует делать
return $this->getLastName() . ' ' . $this->getFirstName();
Понимаю, что в данном примере разница не критична, но хочется научиться писать по "бест практисам".
А сам как думаешь?
Сам склоняюсь к геттерам. Но в таком случае обратил внимание, что код несколько разрастается в кейсах, когда поле может содержать структуру, а не простое значение.
Тут такой интересный момент просто. Многие топят что геттеры не нужны)
Information expert. Если класс обладает данными, то очевидно он знает как с ними работать
Если не затруднит, подскажите, пожалуйста, где можно почитать о таком подходе у «классиков»? Роберт Мартин, Маконнелл итд итп. Концепцию понял, но хотел бы погрузиться более всесторонне.
https://martinfowler.com/bliki/TellDontAsk.html
А вот статья от "местного жителя" https://habr.com/ru/post/500416/ Ну и заодно интересные обсуждения в комментах как за, так и против.
Спасибо за столь развёрнутый ответ!) Сейчас буду погружаться.
Как удобно так и делай, тут вообще нету никаких правил
Ну если не холиварить на тему геттеров, то внутри вашего getFullName() лучше использовать геттеры, раз уж они есть. Чтобы все ваши геттеры отдавали согласованные ответы. Пример: в getFirstName() и getLastName() может использоваться trim, и если в getFullName() вы дернете свойства напрямую, то trim не применится, и fullname перестанет быть консистентным с именем и фамилией.
Согласен с вами, спасибо за отклик. Пока такой вариант заиспользовал. Не готов ещё морально отказаться от геттеров)
Обсуждают сегодня