Внедрение функциональной зависимости - PullRequest
7 голосов
/ 22 июня 2011

При написании объектно-ориентированного программного обеспечения я часто использую внедрение зависимостей:

  • для объединения функциональности высокого уровня из возможностей более низкого уровня: моя служба управления учетными записями использует хранилища и службы проверки, а не реализует их сама.

  • для изоляции компонентов от их зависимостей: моя служба управления учетными записями использует свои зависимости через интерфейсы, так что я могу поменять местами реализации, макет для модульного тестирования и т. Д.

Какие шаблоны существуют в функциональных языках программирования для достижения этих целей?

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

В Clojure кажется, что протоколы решают эту проблему неплохо, но мне было действительно интересно, как проблема решается в более общем плане ...

Ответы [ 3 ]

8 голосов
/ 22 июня 2011

Некоторое время назад я прочитал пост , описывающий, как внедрение зависимости может рассматриваться как каррирование в функциональном программировании.Я думаю, что это очень интересно, и это дает хороший взгляд на тему.

3 голосов
/ 22 июня 2011

В небольших масштабах такие вещи, как каррирование и функции как параметры, сокращают необходимость в зависимостях модулей.В более широком масштабе такие вещи, как стандартные функторы ML, очень полезны для этой цели.В Racket есть система, называемая юнитами, которая тоже хорошо справляется с этой задачей.

0 голосов
/ 08 декабря 2013

Я разработал небольшую библиотеку, которая показалась мне полезной для DI в функционально-ориентированной (JavaScript) среде, в этом нет ничего особенного, мне просто нравится немного метод.

...