オブジェクト指向、DIとService Locatorの違いを教えて4
1 :仕様書無しさん:2018/07/07(土) 10:47:57.49 .net
■ オブジェクト指向・デザインパターン(有用)
わかり易い例
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/
133 :仕様書無しさん:2018/07/08(日) 18:23:51.57 .net
デコレーター使いたいなぁとかパラメーターで分岐する生成したいなぁとか細かく制御しようとするとDIコンテナじゃ物足りないんだよね
コンテナに登録するのとファクトリー書くのじゃ手間に大差ないし
DIは便利だけどDIコンテナとないうゴミパターンを必須にされたら困るよ
12 :仕様書無しさん:2018/07/07(土) 11:31:48.23 .net
Assemblerを使う場合のDI
https://github.com/google/guice/wiki/Motivation#dependency-injection-with-guice
Assemblerを使わない場合のDI
https://github.com/google/guice/wiki/Motivation#dependency-injection
217 :仕様書無しさん:2018/07/10(火) 23:28:22.82 .net
:2018/07/17(火) 06:17:54.62 .net
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も、依存関係を解決する方法で
そのやり方が違うものである
263 :仕様書無しさん:2018/07/12(木) 08:59:22.67 .net
これぐらいDIコンテナを自分で作ったことがあれば
わかると思うんだけどな。
207 :仕様書無しさん:2018/07/09(月) 09:18:47.02 .net
そもそもクラス構成なんかそうそう変えないだろ?
170 :仕様書無しさん:2018/07/08(日) 21:36:17.46 .net
ちなみにDIの保守性の悪さを示す例
誰か有名でそれなりの規模のものを知ってると嬉しいんだが、
まあ適当に見つけてきた
https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/applicationContext.xml
DIコンテナを使わない場合でも、これ相当のことをコードで書く必要がある。
117 :仕様書無しさん:2018/07/08(日) 10:31:08.86 .net
:2018/07/07(土) 15:42:21.15 .net
とりあえず https://kakutani.com/trans/fowler/injection.html の中から
Dependency Injection と Service Locator の違いが書いてある部分を抜き出してみた
これがそれぞれのパターンの重要な特徴だと思われる
> Dependency Injection の形式
> Dependency Injection の基本的な考え方は、独立したオブジェクトをAssembler(組み立て係)として用意し、
> MovieFinder インタフェースの実装を MovieLister クラスのフィールドへ適切に設定させるというものだ。
https://kakutani.com/trans/fowler/injector.gif
> Service Locator を利用する
> Service Locator の背後にある基本的な考え方は、あるアプリケーションが必要とするであろうサービスの
> すべてを保持する、単一のオブジェクトを用意するというものだ。したがって、今回のアプリケーション用
> ServiceLocator は、必要に応じて MovieFinder を返すメソッドを持つことになる。
> そうなると当然、MovieLister から ServiceLocator への参照が発生してしまい、結果として図3のような依存関係を示すことになる。
255 :仕様書無しさん:2018/07/12(木) 05:12:09.92 .net
:2018/07/08(日) 21:25:42.22 .net
:2018/07/08(日) 20:43:49.16 .net
:2018/07/07(土) 16:43:53.06 .net
この業界でマーチンファウラーを知らないとかモグリだろ
59 :仕様書無しさん:2018/07/07(土) 16:27:31.44 .net
お、今度のドカタは知恵をつけてきたじゃん
今度は「数学的証明さん」はどんなふうに対抗するのかな?w
109 :仕様書無しさん:2018/07/08(日) 08:48:57.07 .net
必須じゃなくてもDIコンテナを使わないと
手動でDIコンテナ相当のことをしないといけないのでもっと大変
だから開発効率上、DIコンテナを使うのは必須
292 :仕様書無しさん:2018/07/17(火) 14:22:13.35 .net
デザインパターンは、プログラマの間で正確に意味を伝わるようにした
共通の用語なんだから当然。
それに対してファクトリーはデザインパターンではなく正確な用語じゃない
だから意味が正確に伝わらない。
それを言っておかないと、ファクトリーとDI が同一のものとか言い出しかねないからな。
ファクトリーにオブジェクトのコンテナと依存関係を解決したものがDI
通常ファクトリーといったらオブジェクトの生成ぐらいしか意味を持たない
(つまりコンテナ機能はないので毎回作成だし、依存関係の解決もしない)
119 :仕様書無しさん:2018/07/08(日) 10:36:41.69 .net
:2018/07/07(土) 20:13:13.14 .net
つまり他人は正しいとは限らない
俺のこと信じる気になりましたか?
93 :仕様書無しさん:2018/07/07(土) 20:34:29.00 .net
ハゲだぞ、こいつハゲだぞ、俺はふさふさだ
ハゲと言うだけで、もう結論出てるだろ
184 :仕様書無しさん:2018/07/08(日) 21:53:01.50 .net
:2018/07/08(日) 20:17:40.56 .net
:2018/07/12(木) 09:36:10.66 .net
> 内部で以下相当のことをやることが可能になる
内部っていうのは、DIContainer.create関数内部って話ね。
MyObjectやA、B、Cクラスのことではないぞ
208 :仕様書無しさん:2018/07/09(月) 10:50:12.45 .net
DIコンテナもxml設定ファイルもウンコ言語Javaが産んだドカタ文化だろ
Javaのゴミさを理由にDIを貶めてんじゃねーよ
89 :仕様書無しさん:2018/07/07(土) 20:20:36.25 .net
DIアンチじゃねーし
ファウラーは尊敬してるが
DIとDIコンテナは別の話だ
それだけ
258 :仕様書無しさん:2018/07/12(木) 08:11:31.68 .net
:2018/07/07(土) 23:24:29.60 .net
ファウラーの定義で何か問題あるの?
49 :仕様書無しさん:2018/07/07(土) 16:15:57.41 .net
:2018/07/11(水) 04:10:40.54 .net
:2018/07/11(水) 17:26:15.92 .net
:2018/07/07(土) 16:24:47.75 .net
:2018/07/07(土) 15:37:14.44 .net
ですね。だからみんなDIはいらないって言ってる
176 :仕様書無しさん:2018/07/08(日) 21:39:32.86 .net
ここいらで止めといてあげるが、まだ半分w
297 :仕様書無しさん:2018/07/17(火) 21:33:00.27 .net
:2018/07/17(火) 10:25:22.27 .net
これも忘れずに
GoFのデザインパターンにあるのはFactory MethodとAbstract Factoryであって
ファクトリーもコンテナもないので、そう聞かれても正確な答えにはならない
ファクトリー = オブジェクトを生成するもの
コンテナ = 何かの入れ物
っていうアバウトな定義でいいのであれば、その通りだが。
更に言うなら「ファクトリー+コンテナ」には、インターフェースの実装を
生成するオブジェクトのクラスフィールドに設定させるという基本的な考えを実現する機能が
抜けてるので「ファクトリー+コンテナ+依存関係の解決」がDIコンテナと言える。
これに実際のDIコンテナはAOPの機能がついてたりするんだがこっちはおまけだな
318 :仕様書無しさん:2018/07/18(水) 17:38:16.22 .net
:2018/07/12(木) 05:21:33.17 .net
:2018/07/12(木) 20:57:48.71 .net
何回言えば区別できるようになるんだ
103 :仕様書無しさん:2018/07/07(土) 22:47:30.00 .net
:2018/07/08(日) 17:07:13.23 .net
:2018/07/07(土) 21:56:50.89 .net
:2018/07/07(土) 19:27:59.48 .net
:2018/07/08(日) 21:40:39.93 .net
:2018/07/07(土) 16:08:08.71 .net
物理法則と矛盾した世界を定義することも出来るのが数学だから
ドカタが無能でない世界も定義できる。数学ならね
でもこのスレのドカタは無能だねw
85 :仕様書無しさん:2018/07/07(土) 20:08:47.35 .net
別の惑星では違う定義で同じことやってるかもしれない
誰が決めたから正しいなんてのは文系的で馬鹿馬鹿しいか細い理だよ
99 :仕様書無しさん:2018/07/07(土) 21:33:00.43 .net
はい、茶番は終わりだ
DIとService Locatorの定義
> Dependency Injection の形式
> Dependency Injection の基本的な考え方は、独立したオブジェクトをAssembler(組み立て係)として用意し、
> MovieFinder インタフェースの実装を MovieLister クラスのフィールドへ適切に設定させるというものだ。
https://kakutani.com/trans/fowler/injector.gif
> Service Locator を利用する
> Service Locator の背後にある基本的な考え方は、あるアプリケーションが必要とするであろうサービスの
> すべてを保持する、単一のオブジェクトを用意するというものだ。したがって、今回のアプリケーション用
> ServiceLocator は、必要に応じて MovieFinder を返すメソッドを持つことになる。
> そうなると当然、MovieLister から ServiceLocator への参照が発生してしまい、結果として図3のような依存関係を示すことになる。
32 :仕様書無しさん:2018/07/07(土) 15:52:38.12 .net
:2018/07/08(日) 19:58:38.85 .net
:2018/07/12(木) 05:09:02.12 .net
:2018/07/08(日) 21:19:12.80 .net
:2018/07/12(木) 14:47:58.38 .net
GoFのデザインパターンにあるのはFactory MethodとAbstract Factoryであって
ファクトリーもコンテナもないので、そう聞かれても正確な答えにはならない
ファクトリー = オブジェクトを生成するもの
コンテナ = 何かの入れ物
っていうアバウトな定義でいいのであれば、その通りだが。
更に言うなら「ファクトリー+コンテナ」には、インターフェースの実装を
生成するオブジェクトのクラスフィールドに設定させるという基本的な考えを実現する機能が
抜けてるので「ファクトリー+コンテナ+依存関係の解決」がDIコンテナと言える。
これに実際のDIコンテナはAOPの機能がついてたりするんだがこっちはおまけだな
この記事を読んだ方へのおすすめ
-
正社員で派遣(常駐)されてる奴は目覚めたら?
元スレ 1 :仕様書無しさん:2008/07/16(水) 07:42:51 .net いいかげん会社に利用されてるだけということに気づきませんか? 端から見ていて明かに異常です。 え?会社を辞めるといったら、「○○リーダ…
-
仕事についていけません
元スレ 1 :仕様書無しさん:2014/07/27(日) 15:51:19.03 .net 割り当てられた仕事についていけません クビになりそうです 24 :仕様書無しさん:2014/08/07(木) 15:56:53.…
-
teratailもりあがっtail? 13問目
元スレ 1 :仕様書無しさん:2018/07/13(金) 10:18:57.17 .net teratail http://teratail.com/ 前スレ teratailもりあがっtail? 12問目 http:/…
-
プログラマならこれだけは入れとけというツール
元スレ 1 :仕様書無しさん:2013/08/24(土) NY:AN:NY.AN .net 教えてください 66 :仕様書無しさん:2013/09/15(日) 14:42:16.19 .net 虹のビオレッタ 212 :…
-
えっちなをつけて興奮するスレ
元スレ 1 :仕様書無しさん:2015/10/12(月) 08:48:16.37 .net えっちな深夜残業 104 :仕様書無しさん:2017/06/15(木) 20:48:33.73 .net えっちな性器表現 /ち…
-
プログラマー愚痴専用スレ
元スレ 1 :仕様書無しさん:2019/10/26(土) 13:15:37.30 .net 日々溜まってる愚痴を吐き出すスレ 面倒くさい奴は総スルーで 38 :仕様書無しさん:2019/10/31(木) 07:53:57…
-
どんなパソコン使ってる?
元スレ 1 :仕様書無しさん:2019/08/04(日) 13:56:58.13 .net 初心者からベテランまで 31 :仕様書無しさん:2019/08/25(日) 11:21:26.77 .net ノートPC買おうと…
-
無能大先生を崇めるスレ
元スレ 1 :仕様書無しさん:2019/03/25(月) 19:41:49.53 .net 有能「無能大先生、この簡単なタスクを一つお願いしたいのですが」 無能「できません、今私は忙しいので」 有能「ははぁー、大変失礼致…
-
プログラマの雑談部屋 ★186
元スレ 1 :仕様書無しさん:2022/02/02(水) 19:19:10.23 .net プログラマの雑談部屋 ★180 http://medaka.5ch.net/test/read.cgi/prog/1641492…
-
天才以外お断りプログラミング言語
元スレ 1 :仕様書無しさん:2019/11/23(土) 16:21:26.85 .net C++は難しすぎる 34 :仕様書無しさん:2019/11/25(月) 16:09:41.92 .net なんで天才以外がプログ…
-
競技プログラミングにハマるプログラマのスレ 22
元スレ 1 :仕様書無しさん:2019/12/02(月) 20:50:54.40 .net プログラミングコンテスト(プロコン)やオンラインジャッジや競技プログラミング(競プロ)やCTFなどを楽しんでる競技プログラマ(競…
-
競技プログラミングにハマるプログラマのスレ 58
元スレ 1 :仕様書無しさん:2021/06/19(土) 20:42:09.85 .net 競技プログラミング、オンラインジャッジ、プログラミングコンテストやCTFに関する雑談スレ 次スレは AtCoder https:…
最新のまとめリスト
最近のコメント
- 匿名 : 【いちゃ部屋】株式会社SHIFT【5ch出張所】
新入社員はわかいそう、 在宅勤務でe-ラニングうけとけ、 ... (6/18) - 匿名 : 【残業代】福井 株式会社アスタ【未払い】
プライド高いところあるけど清輝あるなら大丈夫や (5/28) - 匿名 : 【残業代】福井 株式会社アスタ【未払い】
プライド高いところあるけど清輝あるなら大丈夫か (5/07)
レスを投稿する(名前省略可)