Я наткнулся на google guice и не мог понять это и что он сделал, хотя вокруг, похоже, много шумихи. Я надеялся получить клоурианскую перспективу библиотеки и почему она необходима/не нужна в приложениях clojure, и если в язык есть что-то подобное.
Что такое clojure эквивалент google guice?
Ответ 1
Из-за системы Java OO и типа динамическое переключение между различными базовыми реализациями (например, для тестовых (издевательских) целей) может быть затруднено. Библиотеки, такие как Google Guice, предназначены для более гибкого управления этими инъекциями зависимостей в Java.
В Clojure и других функциональных языках функции могут быть переданы, что упрощает использование различных реализаций.
В Clojure можно сделать несколько способов:
- Использование вашего выбора функции в качестве параметров в функциях более высокого порядка.
- (Re) Связывание вашего выбора функции с var.
- Инкапсулирование вашего выбора функции внутри закрытий, которые затем могут быть переданы и вызваны.
Глава 12 Clojure Программирование содержит несколько хороших примеров шаблонов OO, таких как инъекция зависимостей и альтернативные способы их обработки в Clojure.
У Шона Девлина также есть Full Disclojure video по Injection Dependency в Clojure. Его пример, возможно, был выбран лучше. Вместо использования совершенно разных функций в его закрытии, он использует factory, который возвращает разные "версии" функции. Суть остается тем же, хотя.
В принципе, инъекция зависимостей - это шаблон, который является необходимым злом в ООП, и может быть легко разрешен (или даже не проблема) в FP.
Ответ 2
Грубые эквиваленты Clojure все еще находятся в разработке. В настоящее время разрабатываются две библиотеки (начиная с октября '12): Prismatic Graph (еще не открытые источники) и Flow Стюарт Сьерра.
Обратите внимание, что я считаю, что Guice больше, чем инъекции зависимостей. Он обеспечивает основу для конфигурации/модуляции приложения. Вышеупомянутые библиотеки нацелены на достижение этой цели.