В стороне: я написал это в ответ на вопрос Даллина (сейчас закрытый), но я все еще чувствую, что это может быть полезно для кого-то, так что здесь идет
Я думаю, что причина распыления функций в 2 раза, и, как упоминает @jozefg, зависит от используемого языка.
Разделение проблем
Основная причина сделать это состоит в том, чтобы разные части кода были разделены, поэтому любой блок кода, который непосредственно не способствует достижению желаемого результата / цели функции, является отдельной задачей и может быть извлечен.
Допустим, у вас есть фоновая задача, которая также обновляет индикатор выполнения, обновление индикатора выполнения не имеет прямого отношения к длительной задаче, поэтому ее следует извлечь, даже если это единственный фрагмент кода, использующий индикатор выполнения.
Скажем, в JavaScript у вас есть функция getMyData (), которая 1) создает сообщение мыла из параметров, 2) инициализирует ссылку на службу, 3) вызывает службу с сообщением мыла, 4) анализирует результат, 5) возвращает результат. Кажется разумным, я написал эту точную функцию много раз - но на самом деле , что может быть разбит на 3 частных функций только включая код для 3 и 5 (если что) , как ни один из другого кода непосредственно отвечает за получение данных от службы ,
Улучшенный опыт отладки
Если у вас полностью атомарные функции, ваша трассировка стека становится списком задач, в котором перечисляется весь успешно выполненный код, а именно:
- Получить мои данные
- Инициализация справочной службы
- Анализ обработанного ответа - ОШИБКА
было бы гораздо интереснее узнать, что при получении данных произошла ошибка. Но некоторые инструменты еще более полезны для отладки подробных деревьев вызовов, чем, например, Microsoft's Debugger Canvas .
Я также понимаю ваши опасения по поводу того, что может быть трудно следовать коду, написанному таким образом, потому что в конце концов вам нужно выбрать порядок функций в одном файле, где в качестве дерева вызовов будет выделено более сложное, чем , Но если функции названы правильно (intellisense позволяет мне использовать 3-4 обычных слова в любой понравившейся мне функции, не замедляя меня) и структурироваться с открытым интерфейсом в верхней части файла, ваш код будет читаться как псевдокод, который безусловно, самый простой способ получить общее представление о кодовой базе.
К вашему сведению - это одна из тех вещей, которые «делай, как я говорю, а не я», хранить атомарный код бессмысленно, если только вы безжалостно не согласны с ним, ИМХО, а я нет.