TG Telegram Group & Channel
Одержимый кодом🔥 | United States America (US)
Create: Update:

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

Недавно я задумался о правилах нейминга геттеров и сеттеров. Всегда придерживался правила с префиксом 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. А что вы думаете об этом? Думаю, что это очень простая, но важная тема, о которой может высказаться разработчик любого уровня!

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

Недавно я задумался о правилах нейминга геттеров и сеттеров. Всегда придерживался правила с префиксом 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. А что вы думаете об этом? Думаю, что это очень простая, но важная тема, о которой может высказаться разработчик любого уровня!
🔥9👍6❤‍🔥22


>>Click here to continue<<

Одержимый кодом🔥






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)