![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
DI 盛り上がってるけど震源がわからなかった 誰か早く (Dagger|Koin|任意のDIコンテナ)のやめ方の記事書いて流れかえて
2020-07-03 09:27:26![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
なんか TL が DI コンテナで溢れている。インジェクトは、コンストラクタインジェクトで良い。Auto-Wiring はあると楽だけど、interface を型に指定するとインジェクトするクラス(インスタンス)は指定する必要がある。
2020-07-03 09:32:53![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
エラー処理で主処理が複雑化するのを嫌って、処理が始まる前段階のコンストラクタに持っていくのの繰り返し&それをDIコンテナになんとかさせて一端はハッピーな気持ちにはなったが、 diskfull とか実行時エラーが起こるのは避けられなくて結局エラー処理を足してくと中途半端な気分になるって話?
2020-07-03 09:34:44![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@shin1x1 DI, DI コンテナは blog に書いてました。 blog.shin1x1.com/entry/di-memo #phpgenba で話してた回です。 php-genba.shin1x1.com/7
2020-07-03 09:34:45![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
これを僕に教えてくれた先輩がなぜかS3Clientの生成をDIコンテナに任せず、謎にHelperと名付けたクラスから静的呼び出しでインスタンス生成してたことがありましてねぇ
2020-07-03 09:37:01![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
DIコンテナを使う理由はそうなんだけど、なんでDIするか?の答えにはなっていないような 個人的には依存の解決はPullするかPush(Injection)するかしかないと思っていて、PullはStaticなリポジトリへ依存しないといけなくなるからDIするんだけど 前にこの辺にかいた nuits.jp/entry/servicel… twitter.com/t_wada/status/…
2020-07-03 09:41:01![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
依存の注入はコンストラクタでやろう ↓ 依存と生成知識がシステム中に散らばる ↓ 生成知識をファクトリーで隠蔽しよう ↓ 今度はファクトリーがシステム中に散らばる ↓ ファクトリーはシステム中にDIコンテナひとつでよくね? ↓ DIコンテナが依存と生成知識を一括管理し、秩序と調和が訪れる(完)
2020-07-03 08:42:20![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
「低結合高凝集にしませう」とか「DIコンテナに依存した巨大クラス避けませう」とか抽象的すぎるから、分かりやすく「1クラス1パブリックメソッドでいこう」でええやん それなら誰でも理解できるし最悪な実装にはならんやろ💣💣💣
2020-07-03 09:48:03![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
任意のDIコンテナのやめ方 1. まず Java を滅ぼします 2. すべてが Kotlin になったらコンストラクタDIでデフォルト引数に指定しつつ差し替え可能にします 3. View 層は Application から取ってきます 以上?
2020-07-03 09:48:09![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
正直dicon世代のDIコンテナって、XML HellからのDIに対するアレルギーを埋め込んでしまった気がしていて、あまり好きではない。 埋め込まれたの、私の事ですけどね
2020-07-03 09:50:38![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
DI 議論において、重いコンテナと軽いコンテナと出来損ないの自前コンテナもどきの違いはあっても、「DI パターン」と DI コンテナの違いなんてないよ。
2020-07-03 09:51:28![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
依存の注入はコンストラクタでやろう ↓ 依存と生成知識がシステム中に散らばる ↓ 生成知識をファクトリーで隠蔽しよう ↓ 今度はファクトリーがシステム中に散らばる ↓ ファクトリーはシステム中にDIコンテナひとつでよくね? ↓ 今度はDI定義がシステム中に散らばる(一番追いにくい形で)
2020-07-03 09:55:00![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
DI コンテナに頼りきりでオブジェクトの生成が困難になるの、それだけそのオブジェクトが依存関係持ちすぎてるというだけなので DI が悪いとかではないような
2020-07-03 09:55:10![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
DIはPushかPullか、pullはコンテナに依存するからpushでインジェクション。 でも、pushはDIコンテナのライブラリとかFWに依存するじゃない。 なぜそこは依存して良い事になるのだろうか。 ロジック内に依存が紛れ込むのがダメだって事かな?注入ならロジックが純粋な状態になる。
2020-07-03 09:58:32![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
密結合というペインを解消するためならAndroidだったらKotlinのコンストラクタインジェクション+デフォルト引数で可能で、作りたてで小規模なアプリならそれでもいいかも(゜-゜)大規模になって別のペインが出てきたらそれを解決するDIコンテナなりなにかを導入すればいいわけで。
2020-07-03 09:58:34![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
clojure はここで言うDIとは違うかもだけど、mount とか component とかのライフサイクル系のコンテナはよく使われてる気がする
2020-07-03 09:59:39![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
DIがどうとかを本質の部分で語れる程は詳しくねーけど、DIコンテナを今ある形で設計した人は大分色んな人に恨まれてると思うぞ。 依存情報を参照するのに定義を探す必要があるってなんの冗談だって未だに思ってる。
2020-07-03 10:01:24