При написании объектно-ориентированного программного обеспечения я часто использую внедрение зависимостей:
для объединения функциональности высокого уровня из возможностей более низкого уровня: моя служба управления учетными записями использует хранилища и службы проверки, а не реализует их сама.
для изоляции компонентов от их зависимостей: моя служба управления учетными записями использует свои зависимости через интерфейсы, так что я могу поменять местами реализации, макет для модульного тестирования и т. Д.
Какие шаблоны существуют в функциональных языках программирования для достижения этих целей?
edit: комментатор справедливо спрашивает: «А как насчет просто передачи функций?». Я думаю, что следующий комментарий о группировке функций бьет по голове: служба - это набор функций с общим набором зависимостей, которые я могу обрабатывать как атомарную группу.
В Clojure кажется, что протоколы решают эту проблему неплохо, но мне было действительно интересно, как проблема решается в более общем плане ...