Я использую функции вместо классов, и я обнаружил, что не могу сказать, когда другая функция, на которую он опирается, - это зависимость, которая должна быть подвергнута индивидуальной проверке или внутренней детали реализации, которая не должна. Как вы можете определить, что это такое?
Небольшой контекст: я пишу очень простой интерпретатор Lisp, который имеет функцию eval(). У него будет много обязанностей, слишком много на самом деле, таких как оценка символов по-разному, чем списки (все остальное оценивает для себя). При оценке символов он имеет свой собственный сложный рабочий процесс (поиск по окружению), а при оценке списков он еще более усложняется, поскольку список может быть макросом, функцией или специальной формой, каждый из которых имеет свой собственный сложный рабочий процесс и набор обязанностей.
Я не могу сказать, должны ли мои функции eval_symbol() и eval_list() рассматриваться как внутренние детали реализации eval(), которые должны быть протестированы с помощью собственных модульных тестов eval() или подлинными зависимостями, которые должны быть без модульного тестирования независимо от eval().