При внесении изменений в большие системы я часто сталкиваюсь с проблемой, заключающейся в том, что какой-то части функциональности требуется получить некоторые данные из другой части, но они находятся в разных частях глубокого и ветвящегося дерева вызовов, возможно, проходящего через прослушиватели событий, отложенные вызовы, и т.д. Таким образом, простое изменение может быстро появиться.
Соответствующая цитата из поста Йосси Крейнина в блоге по адресу http://www.yosefk.com/blog/i-want-a-struct-linker.html :
У вас есть какая-то структура данных, которую вы часто передаете. Вскоре самое ценное в структуре - это не данные, которые она хранит, а тот факт, что она доступна на всех этапах контроля.
Глобальные переменные - это один из классических способов позволить коду «кричать» удаленному коду, но они, как известно, проблематичны. Переменные с динамической областью действия являются более ограниченным способом, но они также проблематичны.
Есть ли какие-либо исследования языка программирования, направленные на решение этой проблемы? Можем ли мы упростить добавление непредвиденных потоков данных в большую кодовую базу, сохраняя при этом статическую проверку, простое модульное тестирование и другие полезности?