オブジェクト指向、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

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のような依存関係を示すことになる。

https://kakutani.com/trans/fowler/locator.gif

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のような依存関係を示すことになる。

https://kakutani.com/trans/fowler/locator.gif

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の機能がついてたりするんだがこっちはおまけだな

参考になったらSNSでシェアお願いします!

レスを投稿する(名前省略可)

この記事を読んだ方へのおすすめ

  • 俺はバグでこんなすごい被害を出したぞ! part 0x14

    元スレ 1 :仕様書無しさん:2017/12/17(日) 22:06:51.72 .net という人、存分に自慢してください。 前スレ 俺はバグでこんなすごい被害を出したぞ! part 0x13 http://medak…

  • 【相談】プログラマーになりたい人のためのスレ 6

    元スレ 1 :仕様書無しさん:2020/11/17(火) 20:34:32.88 .net プログラマーになりたいけどどうすれば良いのとか、 プログラミングを独学でやるにはどうすれば良いのとか、 あまりにも単発質問スレが…

  • RPAも結局属人化してね?w

    元スレ 1 :仕様書無しさん:2020/10/31(土) 17:44:30.31 .net 大半の日本人は、説明書を読むくらいの少しの努力もできない。 こう考えておいたほうが良くね? RPAにしても多少の勉強は必要なのに…

  • 結局日本がだめなのって

    元スレ 1 :仕様書無しさん:2021/08/30(月) 06:44:38.42 .net VBAすらできる人200人に一人いるかいないかな状態だからなんじゃね? 2 :仕様書無しさん:2021/08/30(月) 22:…

  • 精神障害2級 統合失調症のプログラマと語るスレ

    元スレ 1 : :2018/01/19(金) 23:03:56.57 .net 某35歳スレの影響で (精神)障害者の雇用について著しい誤解が起きているのではないかということを懸念してのスレ立てです 基本的にはアルゴリズ…

  • コボラーのびっくりすること

    元スレ 1 :仕様書無しさん:2013/04/02(火) 22:46:53.57 .net nullという概念がない 9 :仕様書無しさん:2013/10/18(金) 09:15:48.19 .net >>5…

  • 東京コンピュータサービス(TCS)

    元スレ 1 :仕様書無しさん:2018/08/03(金) 18:28:42.90 .net ITブラックNO1でブラック偏差値ランキング75のTCSです。 グループ会社ももちろんブラックです。 この会社は北朝鮮の様な会社…

  • ハァ?未経験者歓迎じゃねーのかよ? その2

    元スレ 1 :仕様書無しさん:2009/04/27(月) 22:14:50 .net どの求人情報見てもよく未経験歓迎とか書いてあるのに いざ面接行くと「経験年数が足らない」とか「未経験じゃちょっと」とか 言ってる奴は何…

  • プログラマーってなんで不細工で陰湿な男が多いの?

    元スレ 1 :仕様書無しさん:2017/07/22(土) 09:57:29.08.net 俺は有名私大の理工学部卒で、新卒でUターンして地方の中小IT企業に入ってしまいましたが、周りはオタクっぽい奴か、短気で不細工で陰湿…

  • プログラマーになりたい人のためのスレ 17

    元スレ 1 :仕様書無しさん:2022/05/02(月) 16:59:22.67 .net 1仕様書無しさん2021/04/13(火) 18:42:19.94 「プログラマーになりたいけどどうすれば良いの」とか、 「プロ…

  • 競技プログラミングにハマるプログラマのスレ 72

    元スレ 1 :仕様書無しさん:2021/10/28(木) 19:14:21.09 .net 競技プログラミング、オンラインジャッジ、プログラミングコンテストやCTFに関する雑談スレ 次スレは AtCoder https:…

  • 派遣社員の40代〜定年ってどんなの?

    元スレ 1 :仕様書無しさん:2007/02/10(土) 01:11:49 .net 自分は30代で、他社に常駐で働いています。 このまま定年まで、ずっと仕事があるのか心配です。 アドバイスでも何でもいいので、皆さんのコ…

最近のコメント

匿名 : 【いちゃ部屋】株式会社SHIFT【5ch出張所】
 新入社員はわかいそう、 在宅勤務でe-ラニングうけとけ、 ... (6/18)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 プライド高いところあるけど清輝あるなら大丈夫や (5/28)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 プライド高いところあるけど清輝あるなら大丈夫か (5/07)
ページTOPへ↑