私はGoogleのguiceに出くわして、実際にそれを理解することができなかったし、それが何をしたのか、それの周りに誇大宣伝のようです。私は、図書館のクロージャー的な視点を得ることを望んでいたし、クロージャーアプリケーションで必要とされている/不要であること、そして言語に組み込まれた同様のものがあれば、google guiceに相当するclojureは何ですか?
13
A
答えて
14
Javaのオブジェクト指向(OO)とタイプのシステムのために、(テスト(模擬)目的のための)異なる基礎となる実装を動的に切り替えることは、管理が難しいことがあります。 Google Guiceのようなライブラリは、Javaのこれらのdependency injectionsをもっとうまく処理することを意図しています。
Clojureや他の関数型言語では、関数を渡すことができます。これにより、さまざまな実装を簡単に使用できます。
これはClojureの中で行うことができますいくつかの方法があります:
- 高階関数のパラメータとしての機能の選択を使用するには。
- (Re)関数の選択肢をvarにバインドします。
- クロージャ内で選択した関数をカプセル化し、それを渡して呼び出すことができます。
第12章Clojure Programmingには、依存性注入のようなOOパターンの素晴らしい例と、Clojureでこれを処理する別の方法があります。
Sean DevlinもClojureの依存性注入についてFull Disclojure videoを持っています。しかし彼の例はより良く選ばれたかもしれない。クロージャで完全に異なる関数実装を使用する代わりに、彼はファンクションの異なる「バージョン」を返すファクトリを使用します。しかし要点は同じです。
基本的に、依存性注入は、OOPで必要な悪であり、FPで簡単に解決できる(または問題ではない)パターンです。
6
関連する問題
- 1. Clojureのスレッディングマクロに相当するScalaは何ですか?
- 2. Python doctestに相当するClojure?
- 3. SilverlightでWinform Control.Handleに相当するものは何ですか?
- 4. Google Apps ScriptのSTDOUTに相当するものは何ですか?
- 5. ScalaのflatMapに相当するGuavaとは何ですか?
- 6. SoapExtension for JSON WebMethodに相当するものは何ですか?
- 7. Pythonイディオムのclojureに相当するものは "if __name__ == '__main__'"ですか?
- 8. iOSフレームワークでLinkedListに相当するものは何ですか?
- 9. 郵便で@ Html.Rawに相当するものは何ですか?
- 10. pythonでisinstanceに相当するissubclassは何ですか?
- 11. MonoTouchでCGImageCreateWithImageInRectに相当するものは何ですか?
- 12. C#でLinkedHashSet(Java)に相当するものは何ですか?
- 13. エリクサーで "const array"に相当する方法は何ですか?
- 14. Javascriptでこれに相当するものは何ですか?
- 15. GoogleプラスFacebook Like Boxに相当する
- 16. Developer Expressに相当するSystem.Windows.Forms.LinkButtonとは何ですか?
- 17. 次のコードに相当するLINQ to XMLは何ですか?
- 18. Windows CEのkbhitに相当するものは何ですか?
- 19. preg_matchのJavaScriptに相当するものは何ですか?
- 20. DjangoアプリケーションのHerokuに相当するものは何ですか?
- 21. clangの `cpp -dD`に相当するものは何ですか?
- 22. assert(minitest)に相当するRSpec構文は何ですか
- 23. @Postconstructのejb-jar.xmlに相当するものは何ですか?
- 24. ASPのContentPlaceHolderに相当するGrails GSPとは何ですか?
- 25. org.eclipse.jdt.core.IJavaElementに相当するPython/PyDevとは何ですか?
- 26. .NETのPHP InfiniteIteratorに相当するものは何ですか?
- 27. Javascriptの.sampleに相当するものは何ですか?
- 28. WinFormsのForm.IsValid()に相当するものは何ですか?
- 29. NOT INのHQLに相当するものは何ですか?
- 30. .netのcurrentProcess.MainModuleに相当するC++は何ですか?
ライブラリリンクありがとうございます。彼らはむしろ面白く見える。私はあなたの評価に同意します.Gloiceは依存性注入だけでは解決できない解決策を提供していますが、Clojureではライブラリを必要としないパターンがいくつかあります。 (例ではNoirを見てください。defpage構造の仕組みと、自動名前空間の読み込みとコレクションを集めてrefやatomで囲まれたマップにします)。 – deterb
合意。 Rich Hickeyが「シンプリシティ」について話している理由と、なぜ非常に多くの開発者が現在、Spring Frameworkの構成怪物について不平を言っているのかと考えています。いずれにしても、Clojureアプリケーションの中には、このようなフレームワークを必要とするように(明らかに)大きくなっているものがあります。 – noahlz