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
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.
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.
- 1. Co to jest odpowiednik clojure Overriding "equals" w java?
- 2. Co to jest odpowiednik addFooterView dla GridView?
- 3. Co to jest odpowiednik Spring w FactoryModuleBuilder, @AssistedInject i @Assisted w Guice?
- 4. Czy Google Guice jest aktywny?
- 5. Co nowego w Google Guice 3?
- 6. Co to jest odpowiednik "gem" w python?
- 7. Co to jest odpowiednik UINT32_MAX w C++?
- 8. Co to jest odpowiednik java javascript's String.fromCharCode?
- 9. Co to jest odpowiednik preg_quote w PHP?
- 10. Co to jest rubinowy odpowiednik python'a getattr
- 11. Co to jest odpowiednik opencv do flaplr()?
- 12. Co to jest odpowiednik Swift dla dispatch_group_create
- 13. Co to jest odpowiednik System.nanoTime() w .NET?
- 14. Co to jest odpowiednik coredata dla Androida
- 15. Co to jest odpowiednik "pythonic" w Ruby?
- 16. Co to jest odpowiednik WPF dla ControlPaint.Light?
- 17. Co to jest odpowiednik "getElementsByTagName" w jQuery?
- 18. Co to jest odpowiednik Response.Redirect w Silverlight?
- 19. Co to jest deserializacja Jackson odpowiednik @ JsonUnwrapped?
- 20. Co to jest odpowiednik dispatch_block_t w swift?
- 21. Co to jest odpowiednik C# w java.util.regex?
- 22. Co to jest odpowiednik CGImageCreateWithImageInRect w MonoTouch?
- 23. Co to jest odpowiednik Java obiektu Scala?
- 24. Co to jest odpowiednik JPA w .NET?
- 25. Co to jest odpowiednik XPath operatora Coalesce?
- 26. Co to jest odpowiednik firebaseRef.push() z angularfire?
- 27. Co to jest odpowiednik PHP UNHEX() MySQL?
- 28. Co to jest odpowiednik Swift 3 NSURL.URLByAppendingPathComponent()?
- 29. Co to jest odpowiednik ruby preg_quote()?
- 30. Co to jest odpowiednik Monotouch dealloc?
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
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