Связка двух аспектов функции: «что» + «как» является воплощением знания как достичь что. Это могут быть очень маленькие и простые вещи:
- как должно выглядеть сообщение об ошибке,
- как валидировать имейл,
- как аутентифицироваться на определённом внешнем API,
- как выяснить, видно ли всплывающее окно в данный момент или нет,
- как получить значения каждого поля формы при сабмите,
- как понять, что заказ завершён,
- как достать из базы только завершённые заказы, и т. п.
Не всегда это знание как достичь что оформлено в виде отдельной функции. В плохо написанном коде функция может на пути к достижению конечной цели содержать знания о достижении нескольких промежуточных. Жёсткая сцепленность нескольких целей не позволяет достигать их по отдельности, а это:
- вредит гибкости проекта, не позволяя точечно перестраивать и надстраивать функциональность (например, организовать unit-тестирование),
- заставляет повторять реализацию этих же целей в других местах, что нарушает принцип единственной реализации.
Что дальше