c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

RubyのDIコンテナを20行で書く

PHPでアプリケーションを作ってゆく。大きくなると、classが増えてゆく。classが増えてゆき、constructorの引数が増えてゆく。classをnewする順番が決まってゆき、それに従はねばならない。同じインスタンスがあちこちで必要になる。DI (Dependency Injection, IoC) の出番だ。
はじめはPimpleを使うてゐたが面倒になり、既存のDIライブラリは複雑な手続きが必要で、面倒だったので自分で作った。Ranyuen/Diだ。
cf. Ranyuen/Di https://github.com/Ranyuen/Di
cf. PHPで簡単に華麗にDIとAOPをキメる http://c4se.hatenablog.com/entry/2014/12/11/013136

こんなに苦労して作ったDIコンテナだが、Rubyでは20行で書けるとMatzも言ってゐる。

それから言語の動的性質も。 これは、Java業界でDIが注目されていることからもわかる。 DIやXMLを使った設定ファイルってのは、結局硬直したJavaアプリケーションを なんとかして柔軟に、動的にしようという試みにしか見えない。 最初から動的な言語を使っていれば、両者ともほとんど必要になることはない。
私は一時DIについて関心を持って、いろいろ調べてみたし、 自分でDIコンテナを実装してみたりもした。 でも、RubyでならDIコンテナがわずか20行で記述できる上、 よく考えてみたら、その20行も、なくてもほぼ同じことが簡単に実現できることに気がついた時、 DIってのは硬直した言語のための技術なんだと気がついた。

Matzにっき(2009-10-03) the 0.8 true language http://www.rubyist.net/~matz/20091003.html

確かにRubyを書いてゐて、DIが欲しいと思うたことがなかった。PHPに行って、おどろくほど設計しなくてはいけないな、と思ってゐた。
そこでRubyDIコンテナを書いた。


https://gist.github.com/ne-sachirou/722c84c0d43d1f221fe2

20行だった。Pimple相当である。

DeeといふDIコンテナもほぼ同じ作りだ。
cf. Ruby/Rails 用 DI コンテナ Dee をつくった、あるいは Ruby のカルチャーについて - Born Too Late http://blog.yuyat.jp/archives/2330

Rubyだと通常はMultiJSONやActiveJobみたいなのをつかふ。あるいはよくあるモックみたいにclassがいつの間にかすり替はってゐる。あるいは、もともといつのまにか使へるやうになってゐた変数を使うので、すり替はってゐるのに気づかない。