14

私は Google Guice に出くわしましたが、それが何をするのかよく理解できませんでした。私は、ライブラリの clojurian の観点と、それが clojure アプリケーションで必要な/不要な理由と、言語に組み込まれている同様のものがあるかどうかを知りたいと思っていました。

4

2 に答える 2

14

Java の OO と型システムのため、(たとえば、テスト (モック) 目的で) さまざまな基礎となる実装を動的に切り替えることは、管理が難しい場合があります。Google Guice などのライブラリは、Java での依存関係の挿入をより適切に処理することを目的としています。

Clojure やその他の関数型言語では関数を渡すことができるため、さまざまな実装を簡単に使用できます。

Clojure でこれを行う方法はいくつかあります。

  • 選択した関数を高階関数のパラメーターとして使用する。
  • 選択した関数を var に (再) バインドします。
  • 選択した関数をクロージャー内にカプセル化し、それを渡して呼び出すことができます。

Clojure Programmingの Chapter 12 には、依存性注入のような OO パターンのいくつかの良い例と、Clojure でこれらを処理する別の方法があります。

Sean Devlin は、Clojure での依存性注入に関する完全なディスクロジュア ビデオも公開しています。ただし、彼の例はより適切に選択された可能性があります。クロージャーで完全に異なる関数の実装を使用する代わりに、関数の異なる「バージョン」を返すファクトリを使用します。要点は同じままです。

基本的に、依存性注入は、OOP では必要悪であり、FP では簡単に解決できる (または問題にならない) パターンです。

于 2012-10-26T11:43:43.117 に答える
6

大まかな Clojure の同等物はまだ開発中です。現在開発中のライブラリは 2 つあります (2012 年 10 月現在): Prismatic のGraph (まだオープンソース化されていません) とStuart SierraによるFlowです。

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

于 2012-10-26T12:53:49.020 に答える