Ruby(およびその他の動的言語)プログラマーはIoC / Dependency Injectionを使用していますか?


8

私は主にASP.NET開発者であり、私が最近紹介した1つのことは、記述するコードの品質に最も劇的な影響を与えたもので、IoCコンテナーを使用して異なるレイヤー間の依存関係を管理する方法を学びましたアプリケーションの効率。

私は最近、個人的なプロジェクトのためにRuby(およびRails)を学ぶことを趣味にしており、今のところこの言語が大好きです。ただし、私が使用してきたさまざまなチュートリアルやリファレンスから気付いたことの1つは、IoCの使用についてまだ言及されていないことです。これは、初期段階で開発者にドラムされている(およびそうでないはずである).NETとはまったく対照的です。

Rubyで依存性注入が必要ない理由の1つは、クラス内のすべてがパブリックで仮想であり、変更が自由にできるため、優れた単体テストを作成するために実際には必要ないことです。ただし、IoCコンテナを使用することには、他にも多くのメリットがあります。たとえば、これによってもたらされるデカップリングオプション、オブジェクトの作成とライフタイムの管理などです。

Rubyで依存性注入が使用されていますか?そうでない場合、なぜこれが問題ではないのですか?

回答:


6

制御の逆転は、まだうまく適用できる概念です。IoCを適用するために依存性注入を行う必要はありませんが、.NETではそれらが頻繁に一緒になる傾向があります。

.NETでの依存性注入の背後にある大きな動機は、具体的な実装に依存することを回避しています。Rubyでは、先ほど述べたように、物事はよりオープンであり、実行時にクラスの実装を置き換えることができるため、「インターフェース」を作成して明示的に依存関係を注入する必要はほとんどありません。

インターフェースとIoC / DIは.NETでも厳密に必要ではないと主張することができます(テストに関しても-すべての下で太陽の下でインターフェースする必要をなくすことができるモックフレームワークがあります)が、それはRubyでより発音されます。


4

依存性インジェクションは動的言語であるため、動的言語ではそれほど重要ではありません。コードはいつでも変更できるので、変化する可能性のある依存関係を事前に計画する必要はありません。Rubyのような言語でIoCを実現する簡単な方法があります。

同じことについてJamis Buckを指すこのトピックについてのFabio Kung-それらは少し深みを与えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.