Если в названии метода есть and между глаголами - это признак того, что метод берёт на себя слишком много.
Простейший пример:
def validate_and_save_user(user: User):
...
На самом деле это два метода, которые, как гномы из "Гравити Фолз", притворяются одним. Здесь нужна декомпозиция:
def validate_user(user: User):
...
def save_user(user: User):
...
Помимо длинного названия подобные методы создадут много проблем:
- их сложно тестировать. Нужно покрывать все действия, происходящие внутри, поэтому тесты становятся огромными, а процесс их написания превращается в практику по комбинаторике;
- нельзя переиспользовать код. А что, если я в будущем захочу только валидировать пользователя?
- риск прячущихся жуков. При достаточной длине метода в нём могут прятаться баги, которых мы скорее всего не сможем обнаружить глазами.
Казалось бы - мелочь. Но я собственными руками рефакторил такой код. А как-то даже писал на него тесты, потому что зарефакторить спустя годы его существования уже являлось трудной задачей.
#неДелайТак - декомпозируй!
🎤 feelin #cleanCode