Русский
Открыть в Telegram

Пост Муки выбора. Нейминг геттеров и сеттеров

17 июня 2024
О
Одержимый кодом🔥
Фотография
Муки выбора. Нейминг геттеров и сеттеров Недавно я задумался о правилах нейминга геттеров и сеттеров. Всегда придерживался правила с префиксом getName, setName, но недавно при рефакторинге MoonShine я заметил кашу в нейминге, которая имеет право на жизнь, но это не тру. Возникла идея сформировать комплексный подход к неймингу и пользоваться исключительно им. Чтобы все контрибьюторы уже огромного фреймворка MoonShine их придерживались и "говорили на одном языке"! В целом, наверное, местами каша в нейминге появилась из-за продолжительной дружбы с Laravel, где также присутствует разнообразие и мы наблюдаем getKey, setRelations в моделях, но при этом видим path(), host(), fullUrlWithQuery(array $query) . Ну а в чем собственно проблема? Спросите вы. Проблема в том, что getName, setName не подойдет для всех ситуаций, особенно если речь о fluent interface. Просто представьте большой билдер: TableBuilder::make()  ->setFields($fields)  ->setItems($items)  ->setTdAttributes($attributes)  ->setAsyncUrl($url)  ->set...  ->set...  ->set...   В реальности портянка кода будет даже больше, но уже и эта бросается в глаза. Исходя из этого примера, формируем первое правило: 1. Для fluent-методов используем сеттер без префикса set. Ок, вроде разобрались. В глаза попался геттер для получения имени поля - $field->name() Выглядит красиво и большой соблазн присутствует оставить как есть. Но! Это также публичный метод, плюс у него есть аргумент name(?int $index = null) и на вид он ничем не будет отличаться от сеттера и будет вводить в заблуждение. Я искал компромисс между красотой и здравым смыслом, и метался между правилом - для геттеров всегда использовать префикс get, а также использовать префикс get для не публичных геттеров и редко используемых. Остальные геттеры, часто используемые для красоты интерфейса, оставить без префикса, но здравый смысл победил и так появилось второе правило: 2. Геттеры всегда с префиксом get, исключения обсуждаем в процессе ревью пул реквестов После мыслей по геттерам, снова решил взглянуть на сеттеры под новым углом и размышляю, как поступить с fluent всегда без префикса, но если метод используется очень редко, то с префиксом? Но если метод очень редкий, то возможно и fluent лишний?! В общем пока оставляем правила 1 и 2. А что вы думаете об этом? Думаю, что это очень простая, но важная тема, о которой может высказаться разработчик любого уровня!
1 · 721 ·

Рядом в ленте

ООдержимый кодом🔥Век живи - век учись. Или случаи когда интуиция подводит. Пост о моих наблюдениях по объекту реквеста Laravel и небольшие заметки. Итак, я всегда думал, что reqООдержимый кодом🔥Только что пощупал IDX от Google! Делюсь своими впечатлениями, собственно канал для этого и создан. Щупал в процессе общения в чате MoonShine: задали вопрос, я
это сообщение
ООдержимый кодом🔥Привет, коллеги! Уже около года публикую статьи на Хабре, и сегодня обнаружил, что вошел в первую сотню рейтинга пользователей. Это значительное достижение для ООдержимый кодом🔥Obsidian или Notion? Использую Obsidian для заметок и планирования. Очень нравится скорость его работы, md-редактор и связи между заметками.👍 Но есть и минусы -
ООдержимый кодом🔥Одержимый кодом🔥@cutcode · канал
349подписчиков86постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем