2012-10-26 8 views
13

私はGoogleのguiceに出くわして、実際にそれを理解することができなかったし、それが何をしたのか、それの周りに誇大宣伝のようです。私は、図書館のクロージャー的な視点を得ることを望んでいたし、クロージャーアプリケーションで必要とされている/不要であること、そして言語に組み込まれた同様のものがあれば、google guiceに相当するclojureは何ですか?

答えて

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

粗いClojure等価物はまだ開発中です。現在開発中のライブラリは2つあり(Oct'12現在)、PrismaticのGraph(未オープンソース)とFlow(Stuart Sierra)です。

私はGuiceが依存性注入以上のものであると考えています。アプリケーション構成/モジュール化のためのフレームワークを提供します。上記の図書館は、その目標を達成することを目指しています。

+3

ライブラリリンクありがとうございます。彼らはむしろ面白く見える。私はあなたの評価に同意します.Gloiceは依存性注入だけでは解決できない解決策を提供していますが、Clojureではライブラリを必要としないパターンがいくつかあります。 (例ではNoirを見てください。defpage構造の仕組みと、自動名前空間の読み込みとコレクションを集めてrefやatomで囲まれたマップにします)。 – deterb

+1

合意。 Rich Hickeyが「シンプリシティ」について話している理由と、なぜ非常に多くの開発者が現在、Spring Frameworkの構成怪物について不平を言っているのかと考えています。いずれにしても、Clojureアプリケーションの中には、このようなフレームワークを必要とするように(明らかに)大きくなっているものがあります。 – noahlz

関連する問題