2012-10-26 17 views
13

Natknąłem się na guziki google i naprawdę nie mogłem tego zrozumieć i co zrobiłem, chociaż wydaje się, że jest w nim dużo szumu. Miałem nadzieję, że zdobędę clojurianską perspektywę biblioteki i dlaczego jest ona potrzebna/niepotrzebna w aplikacjach clojure i czy było coś podobnego wbudowanego w ten język.Co to jest clojure odpowiednik google guice?

Odpowiedz

14

Z powodu systemu OO języka Java i systemu typu, dynamiczne przełączanie między różnymi implementacjami podstawowymi (na przykład do celów testowych (szyderczych)) może być trudne. Biblioteki takie jak Google Guice są przeznaczone do obsługi tych dependency injections w Javie z większą wdziękiem.

W języku Clojure i innych językach funkcyjnych można przekazywać funkcje, co znacznie ułatwia korzystanie z różnych implementacji.

Istnieje kilka sposobów można to zrobić w Clojure:

  • Korzystanie wyboru funkcji jako parametrów funkcja wyższego rzędu.
  • (Re) Wiązanie wyboru funkcji do var.
  • Kapsuły do ​​wyboru funkcji wewnątrz zamknięć, które można następnie przekazywać i wywoływać.

Rozdział 12 z Clojure Programming ma kilka ładnych przykładów wzorów OO, takich jak zastrzyk zależności i alternatywne sposoby radzenia sobie z nimi w Clojure.

Sean Devlin ma również Full Disclojure video na Injection Dependency Injection w Clojure. Jednak jego przykład mógł być lepszy. Zamiast używać całkowicie różnych funkcji w swoim zamknięciu, używa on fabryki, która zwraca różne "wersje" funkcji. Istota pozostaje taka sama.

Zasadniczo wstrzyknięcie zależności jest wzorcem, który jest złem koniecznym w OOP i może być łatwo rozwiązany (lub nawet nie stanowi problemu) w FP.

6

Surowe ekwiwalenty Clojure są nadal w fazie rozwoju. Istnieją dwa obecnie opracowywane biblioteki (stan na październik 12): Prismatic's Graph (jeszcze nie otwarty) i Flow Stuarta Sierra.

Należy zauważyć, że uważam Guice za coś więcej niż wstrzyknięcie zależności. Zapewnia strukturę konfiguracji/modularyzacji aplikacji. Powyższe biblioteki dążą do osiągnięcia tego celu.

+3

Dzięki za linki do biblioteki; wyglądają raczej interesująco. Zgadzam się z twoją oceną, że Guice dostarcza rozwiązania wykraczające poza zastrzyk polegający na uzależnieniu, choć wydaje mi się, że z niektórymi wzorami, które Clojure umożliwia, nie potrzebujesz tych bibliotek tak często, jak to jest prawie banalne, aby stworzyć twoje własne (spójrz na Noir na przykład, z tym, jak działa konstrukcja defpage i łączy ładowanie przestrzeni automatycznej i agregowanie kolekcji stron w mapę zawiniętą przez ref lub atom). – deterb

+1

Uzgodnione. Myślę, że właśnie dlatego Rich Hickey mówi o "prostocie" i dlaczego tak wielu twórców skarży się na monstrukcje konfiguracyjne Spring Framework. W każdym razie niektóre aplikacje Clojure (na pozór) stały się wystarczająco duże, aby wymagać takich frameworków. – noahlz

Powiązane problemy