2021-03-24 18:02:18
Как я именую всё в приложении.
Когда читаю код, я хочу понимать намерения автора, что он хотел выразить кодом.
Если я вижу функцию
employeeStatusChange, я хочу четко понимать её назначение “сменить статус сотрудника” или же “узнать в каком состоянии находится процесс изменения сотрудника”.
Если коротко, то использую подход:
Namespace + HighContext + LowContext + ActionПримеры выше можно показать так (namespace отсутствует):
employeeStatusChangeemployee — high context, в контексте чего выполняется действие
status — low context, нечто принадлежащее родительскому контексту
change — action, что делаем с этим
То есть изменяем статус сотрудника.
А вот пример с выяснением текущего статуса процесса изменения сотрудника, может выглядеть так
employeeChangeStatus:
employee — high context, всё так же работаем с сотрудником
change — low context, но здесь уже указываем что работаем с сущностью change принадлежащей сотруднику
status — action, выступает как глагол
Таким образом, можно четко обозначить назначение функции, не добавляя дополнительных слов. Получается коротко и понятно, при условии, что конвенцию понимают все в команде.
А вот как быть БЕЗ конвенции? Как отличить эти функции не превращая имя в месиво вроде readStatusOfEmployeeChanging, которое не отсортировать по имени, потому что тогда сгруппируются все функции начинающиеся с read*, вместо группирования по сущности employee.
P.S.
Если переложить этот подход на точечную нотацию, получится вполне себе вменяемая объектная модель:
employeeChangeStatus -> employee.change.status()
А вот readStatusOfEmployeeChanging уже не перекладывается без полной смены порядка слов, что не очень приятно. Ну и важные слова employee и change теряются в середине и конце названия.
904 views15:02