オブジェクト指向、DIとService Locatorの違いを教えて4

1仕様書無しさん2018/07/07(土) 10:47:57.49
■ オブジェクト指向・デザインパターン(有用)
 
 わかり易い例
 class Dog extends Animal
 class Cat extends Animal

■ DI(ゴミ)

 DIとは?・・・オブジェクト指向の依存関係を"ひとまとめに"定義する部分と、それを利用するために
        オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン

 http://kakutani.com/trans/fowler/injection.html

 > Dependency Injection の形式
 > Dependency Injection の基本的な考え方は、独立したオブジェクトを
 > Assembler(組み立て係)として用意し、 MovieFinder インタフェースの実装を
 > MovieLister クラスのフィールドへ適切に設定させるというものだ。
 > 依存関係は図2のようになる。


前スレ

オブジェクト指向とは 分かりやすく教えてくれ
https://medaka.5ch.net/test/read.cgi/prog/1521869966/

オブジェクト指向を分かりやすく例えて教えてくれ 2
https://medaka.5ch.net/test/read.cgi/prog/1525660302/

オブジェクト指向とDIを分かりやすく例えて教えてくれ 3
https://medaka.5ch.net/test/read.cgi/prog/1526733859/

267仕様書無しさん2018/07/12(木) 10:34:11.16
>>262
>obj = new MyObject(); を
>obj = DIContainer.create(MyObject); こう書けるようにするためには

だからそれService Locator
依存を注入される側でDIContainerの参照持ってるから

268仕様書無しさん2018/07/12(木) 12:16:33.28
DIContainerとServiceLocatorの区別もついてないやつがDI DIって騒いでたってこと?

269仕様書無しさん2018/07/12(木) 13:53:06.70
>>267
> 依存を注入される側でDIContainerの参照持ってるから

依存を注入される側ってどれのこと?
具体的にクラス名言って

270仕様書無しさん2018/07/12(木) 13:54:17.71
>>268
だろうね。
依存性を注入される側のコードなんて書いて無いのに
注入される側にDIContainerの参照があるとか
幻が見えてるようだしw

271仕様書無しさん2018/07/12(木) 14:22:31.54
>>268
> DIContainerとServiceLocatorの区別もついてないやつがDI DIって騒いでたってこと?
まさにそれがスレタイの狙い
DIとService Locatorの区別ができる、つまり違いを知ってる人は
Service Locatorはこう〜だけど、DIはこう〜とDIの本質を言うことができる

コンストラクタで依存しているオブジェクトを渡すという構造は
単に依存関係を分離した構造というだけで、依存関係を注入する方法を表していない

独立したオブジェクトをAssembler(組み立て係)として用意して注入する方法こそがDIなわけだよ
依存性の注入 = Dependency Injection なんだから

272仕様書無しさん2018/07/12(木) 14:36:24.22
それって、ファクトリー+コンテナ?

273仕様書無しさん2018/07/12(木) 14:47:58.38
>>272
GoFのデザインパターンにあるのはFactory MethodとAbstract Factoryであって
ファクトリーもコンテナもないので、そう聞かれても正確な答えにはならない

ファクトリー = オブジェクトを生成するもの
コンテナ = 何かの入れ物
っていうアバウトな定義でいいのであれば、その通りだが。

更に言うなら「ファクトリー+コンテナ」には、インターフェースの実装を
生成するオブジェクトのクラスフィールドに設定させるという基本的な考えを実現する機能が
抜けてるので「ファクトリー+コンテナ+依存関係の解決」がDIコンテナと言える。
これに実際のDIコンテナはAOPの機能がついてたりするんだがこっちはおまけだな

274仕様書無しさん2018/07/12(木) 20:26:31.22
>>271
Service Locatorにも組み立て係いるんだけど?

275仕様書無しさん2018/07/12(木) 20:49:03.06
その組立係を何処から参照しているかの違いですね

276仕様書無しさん2018/07/12(木) 20:57:48.71
何回言えば区別できるようになるんだ

277仕様書無しさん2018/07/12(木) 21:01:47.76
言っただけで世界が平和になったらいいね

278仕様書無しさん2018/07/12(木) 21:07:41.83
人間には感情があるからね

279仕様書無しさん2018/07/12(木) 21:08:13.57
人類を滅ぼしたいね

280仕様書無しさん2018/07/13(金) 00:17:32.78
>>279
どうやる?

281仕様書無しさん2018/07/13(金) 09:17:22.69
おまえがたひれば相対的に世界が滅亡したようなものだぞ。

282仕様書無しさん2018/07/13(金) 22:02:01.14
>>280
俺から反物質が生成されるまで生きてみる

283仕様書無しさん2018/07/14(土) 11:09:10.34
JavaScriptのDIコンテナはどれですか?

284仕様書無しさん2018/07/14(土) 12:30:26.98
>>283
こんなのとかどうですか?
https://qiita.com/Quramy/items/e65ee58cf1fba589c81b

285仕様書無しさん2018/07/17(火) 00:02:57.12
終わりですか?

286仕様書無しさん2018/07/17(火) 06:05:16.35
>>285
はい、もう出し尽くしました

287仕様書無しさん2018/07/17(火) 06:11:34.16
最後の話題がこれ
DIとService Locatorの区別もつ無いやつが
DIマンセーしてましたっと

274 返信:仕様書無しさん[sage] 投稿日:2018/07/12(木) 20:26:31.22
>>271
Service Locatorにも組み立て係いるんだけど?

275 自分:仕様書無しさん[sage] 投稿日:2018/07/12(木) 20:49:03.06
その組立係を何処から参照しているかの違いですね

288仕様書無しさん2018/07/17(火) 06:17:54.62
Service Locatorで検索したら
Service Locator パターンについて
https://qiita.com/tassi-yuzukko/items/a81a7b9aaa42198df689
という記事がトップに見つかり、そこから超参考になる記事として以下が紹介されていた

Service LocatorとDependency InjectionパターンとDI Container
http://www.nuits.jp/entry/servicelocator-vs-dependencyinjection

さすがちゃんとわかっている

> 利用箇所の結合度をさげる
> まずはServiceLocatorもDIも関係ない領域です。
> GeolocationServiceからIGeolocationServiceインターフェースを抽出して利用箇所の結合度を下げます。

インターフェースを使って結合度を下げるのはServiceLocatorでもDIでもないと
ちゃーんとわかっている

Service LocatorもDIも、依存関係を解決する方法で
そのやり方が違うものである

289仕様書無しさん2018/07/17(火) 06:48:57.74
インターフェースで結合度を下げる->SLもDIも関係ない

実装インスタンスをクラスの外部で生成して渡す-> DI
注意: つまりSLはDIではない

DIのための生成手順を管理->ファクトリー

ファクトリーの実装パターンの1つ->DIContainer

290仕様書無しさん2018/07/17(火) 10:25:22.27
これも忘れずに

GoFのデザインパターンにあるのはFactory MethodとAbstract Factoryであって
ファクトリーもコンテナもないので、そう聞かれても正確な答えにはならない

ファクトリー = オブジェクトを生成するもの
コンテナ = 何かの入れ物
っていうアバウトな定義でいいのであれば、その通りだが。

更に言うなら「ファクトリー+コンテナ」には、インターフェースの実装を
生成するオブジェクトのクラスフィールドに設定させるという基本的な考えを実現する機能が
抜けてるので「ファクトリー+コンテナ+依存関係の解決」がDIコンテナと言える。
これに実際のDIコンテナはAOPの機能がついてたりするんだがこっちはおまけだな

291仕様書無しさん2018/07/17(火) 10:42:01.75
パターンをそんなに厳密に使ってる奴居るんだw

292仕様書無しさん2018/07/17(火) 14:22:13.35
デザインパターンは、プログラマの間で正確に意味を伝わるようにした
共通の用語なんだから当然。

それに対してファクトリーはデザインパターンではなく正確な用語じゃない
だから意味が正確に伝わらない。

それを言っておかないと、ファクトリーとDI が同一のものとか言い出しかねないからな。
ファクトリーにオブジェクトのコンテナと依存関係を解決したものがDI

通常ファクトリーといったらオブジェクトの生成ぐらいしか意味を持たない
(つまりコンテナ機能はないので毎回作成だし、依存関係の解決もしない)

293仕様書無しさん2018/07/17(火) 14:24:12.12
デザインパターンが実装まで定義してるなんて初耳だな。

294仕様書無しさん2018/07/17(火) 14:31:49.23
実装を定義してるなんて書いてないが?
さっきから言葉の定義の話しかしてないよね?
ファクトリーはこうで、DIはこうって

295仕様書無しさん2018/07/17(火) 20:23:57.65
だって、DIって、実装レベルの話だろ?

296仕様書無しさん2018/07/17(火) 20:47:34.95
設計手法かな

297仕様書無しさん2018/07/17(火) 21:33:00.27
>>287
DIアンチじゃね?

298仕様書無しさん2018/07/17(火) 21:46:46.14
ドリルインポ

299仕様書無しさん2018/07/17(火) 21:59:55.68
設計だよなぁ。DIの実装なんて各フレームワークで全然違うし

300仕様書無しさん2018/07/17(火) 22:01:41.16
DI=ドリルインポ

301仕様書無しさん2018/07/17(火) 22:06:47.83
大好きインぽ

302仕様書無しさん2018/07/17(火) 22:11:16.15
でも明らかに粒度が違うよなぁ
デザインパターンが基本設計なら、DIは詳細設計だろ?
なんで同じステージで語るの?

303仕様書無しさん2018/07/18(水) 00:51:59.32
コンポーネントの切り分けと依存関係は基本設計やろ

304仕様書無しさん2018/07/18(水) 03:30:15.55
DI厨はこういう理屈であることがわかったなw

席は一つしかありません。
基本設計の椅子にデザインパターンが座りました
空きは詳細設計のみです。
だからDIは詳細設計になります。
詳細設計というのはプログラミングのことです。
プログラミングというのは実装です。
だからDIは実装になります
DIが何をやるかには興味がありません。
詳細設計しか椅子がないのだからDIは実装です

305仕様書無しさん2018/07/18(水) 08:36:06.34
UMLで言うところの、黒いひし形か白いひし形かの違いを
延々と言い合うスレって事でいい?

306仕様書無しさん2018/07/18(水) 08:48:55.14
キチガイはスルー

307仕様書無しさん2018/07/18(水) 10:19:28.61
>>305
違うな。ひし形の色だけじゃない。
すべての形、その数、依存関係、まあ要するに
設計なんだが、それを言い合うスレだ

308仕様書無しさん2018/07/18(水) 10:20:02.92
デザインパターンが基本設計なら、DIも基本設計だろ?
同じステージの話なんだから

309仕様書無しさん2018/07/18(水) 10:22:29.33
いやいや、どう見てもDIは実装の話だろ?

310仕様書無しさん2018/07/18(水) 10:35:41.07
どうみてって何を見たの?
見た実装とやらを言ってみて

311仕様書無しさん2018/07/18(水) 10:37:34.47
だって実装の話しかして無いじゃん。

312仕様書無しさん2018/07/18(水) 10:38:36.20
だから見た実装とやらを言ってみて

ま、答えずに逃げてる所みれば
どういうことか、わかりますけどねw

313仕様書無しさん2018/07/18(水) 10:39:15.30
お前が見た「実装」とやらを持って
上司に「実装」しました!って言ってこいよwww

314仕様書無しさん2018/07/18(水) 10:40:41.89
>>312
は?
このスレのどこを見ても実装の話しかして無いだろw

315仕様書無しさん2018/07/18(水) 10:40:57.66
ほらまた逃げたw

316仕様書無しさん2018/07/18(水) 12:10:28.59
よこからスマンけどDIってなーに?

317仕様書無しさん2018/07/18(水) 12:23:53.14
>>1に書いてあるだろ

■ DI(ゴミ)

 DIとは?・・・オブジェクト指向の依存関係を"ひとまとめに"定義する部分と、それを利用するために
        オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン

 http://kakutani.com/trans/fowler/injection.html

 > Dependency Injection の形式
 > Dependency Injection の基本的な考え方は、独立したオブジェクトを
 > Assembler(組み立て係)として用意し、 MovieFinder インタフェースの実装を
 > MovieLister クラスのフィールドへ適切に設定させるというものだ。
 > 依存関係は図2のようになる。

新着レスの表示
レスを投稿する