2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

オブジェクト指向とDIを分かりやすく例えて教えてくれ 3

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

■ DI(ゴミ)

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

 https://web.archive.org/web/20170707082300/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/

2 :仕様書無しさん:2018/05/19(土) 21:51:41.92 .net
■ DIの例
Dog baby = new Dog(mom.cunt, uncle.dick);

3 :仕様書無しさん:2018/05/19(土) 21:59:11.23 .net
>>2
間違い。DIではnewを使わない(DIコンテナが行う)

4 :仕様書無しさん:2018/05/19(土) 22:00:18.05 .net
■ DIの例

それから、PicoContainerはそれぞれのインタフェースがどの実装クラスと結び付けられるのかを通知してもらう必要がある。 MovieFinder にどういうファイル名がインジェクトされるのかについても同様だ。

private MutablePicoContainer configureContainer() {
MutablePicoContainer pico = new DefaultPicoContainer();
Parameter[] finderParams = {new ConstantParameter("movies1.txt")};
pico.registerComponentImplementation(MovieFinder.class, ColonMovieFinder.class, finderParams);
pico.registerComponentImplementation(MovieLister.class);
return pico;
}
この設定コードは、本来ならば別の設定クラスで記述されるべきものだ。

5 :仕様書無しさん:2018/05/19(土) 22:00:41.52 .net
■ コンストラクタインジェクションの例

PicoContainer を利用するためには、以下のようなコードを書く。

public void testWithPico() {
MutablePicoContainer pico = configureContainer();
MovieLister lister = (MovieLister) pico.getComponentInstance(MovieLister.class);
Movie[] movies = lister.moviesDirectedBy("Sergio Leone");
assertEquals("Once Upon a Time in the West", movies[0].getTitle());
}
なお、このサンプルではコンストラクタ・インジェクションを利用しているが、 PicoContainer では
セッター・インジェクションもサポートしている (開発者たちはコンストラクタ・インジェクションのほうが好みのようだけれど)。

6 :仕様書無しさん:2018/05/19(土) 22:02:30.37 .net
■ Spring でのセッター・インジェクションの例
Spring Framework は エンタープライズ Java 開発向けの守備範囲の広いフレームワークだ。
トランザクション、永続化フレームワーク、Web アプリケーション開発や JDBC に関する抽象レイヤがある。

MovieLister がインジェクションに対応できるように、 サービス設定用の setter メソッドを定義しなければならない。
(省略)

同様に、MovieFinder には文字列の setter を定義する。
(省略)

3番目のステップとして、ファイルに設定を記述する。Spring での設定は XML ファイルでもコードでも可能だが、 XMLで行うことが望ましいとされている。

<beans>
<bean id="MovieLister" class="spring.MovieLister">
<property name="finder">
<ref local="MovieFinder"/>
</property>
</bean>
<bean id="MovieFinder" class="spring.ColonMovieFinder">
<property name="filename">
<value>movies1.txt</value>
</property>
</bean>
</beans>

テストはこんな感じだ。
public void testWithSpring() throws Exception {
ApplicationContext ctx = new FileSystemXmlApplicationContext("spring.xml");
MovieLister lister = (MovieLister) ctx.getBean("MovieLister");
Movie[] movies = lister.moviesDirectedBy("Sergio Leone");
assertEquals("Once Upon a Time in the West", movies[0].getTitle());
}

7 :仕様書無しさん:2018/05/19(土) 22:03:15.98 .net
結局手抜きしてフィールドインジェクションしてるわ

8 :仕様書無しさん:2018/05/20(日) 03:13:45.22 .net
XMLもsetterもキモイから嫌い
コードで配線の設定書いてコンストラクタでインジェクションしてる

9 :仕様書無しさん:2018/05/20(日) 06:56:39.07 .net
定義と実装ぐらい区別しようよ

10 :仕様書無しさん:2018/05/20(日) 07:18:45.20 .net
>>9
クラスやインターフェースの定義の話じゃないぞ?

DIの依存関係の定義っていうのはコードもしくは設定ファイル
なんだから、お前が勘違いした実装というのは
「コードで書いたDIの依存関係の」定義だろ

11 :仕様書無しさん:2018/05/20(日) 09:10:00.65 .net
>>6
ついにここまで来たか
学習能力高いな
アノテーション定義もやってみよう

12 :仕様書無しさん:2018/05/20(日) 19:34:27.18 .net
さて、前スレのなぜDIを使うとライフサイクルの事まで
考えなければいけなくなるのか?の答

惜しい所まで来てるんだけど、あと一歩足りない
DIを悪く言えないから、気づいてしまったけど
口に出して言えないのかもしれないねw

DIを使うとライフサイクルの事まで考えなければいけなくなるのは
DIがなにをやってくれるものなのかに気づく必要がある

再掲すると

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

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

一言で言うならば、newを代わりにやってくれるものと考えればいい
それだけ。そう、それだけなんだよ。

だからどんな用途にも使える。これは一見優れているように見えるかもしれないが、
汎用的な解決方法しか提供できないため、逆に特定の問題をシンプルに解決することができない

フレームワークは一般的に特定の問題(例えばウェブアプリ)を解決するために作られたものなので
ライフサイクルの管理もフレームワークで管理して、特定の問題の解決に必要な部分のみを
プログラマが記述すれば良くなる。

13 :仕様書無しさん:2018/05/20(日) 19:36:15.35 .net
もちろんDIを使っていてもフレームワークが
DIを内部に隠蔽することでライフサイクルの管理を
プログラマがしなくてすむようにできるだろうけど、
そうするとプログラマがDIを直接使うのが難しくなってしまう

14 :仕様書無しさん:2018/05/20(日) 19:39:22.07 .net
支離滅裂

15 :仕様書無しさん:2018/05/20(日) 19:39:48.38 .net
以上、staticおじさんでした

16 :仕様書無しさん:2018/05/20(日) 19:40:12.11 .net
反論がないところまで想定済みw

17 :仕様書無しさん:2018/05/20(日) 19:45:28.28 .net
キチガイに触るな

18 :仕様書無しさん:2018/05/20(日) 19:58:39.31 .net
本当に文句だけ言って去っていくのなw

19 :仕様書無しさん:2018/05/20(日) 20:12:33.22 .net
DI(フレームワーク)がライフサイクル管理してくれるんだろ?
プログラマは意識しなくていいやん

20 :仕様書無しさん:2018/05/20(日) 20:13:28.86 .net
まだやってたのか!?
おまえ等がDI大好きなのはわかった…

21 :仕様書無しさん:2018/05/20(日) 20:13:56.23 .net
DIはフレームワークじゃないよ。パターン。
DIパターンを使ったフレームワークと勘違いしてね?

22 :仕様書無しさん:2018/05/20(日) 20:50:05.38 .net
>>12
だいぶ惜しくなってきたんじゃない?

23 :仕様書無しさん:2018/05/21(月) 01:21:20.44 .net
>>22
自分が?まあ反論してないってことはそういうことなんだろうけど

24 :仕様書無しさん:2018/05/21(月) 01:32:01.57 .net
むしろ今までライフサイクル意識せずピュアな実装してたとか恐怖でしかない

25 :仕様書無しさん:2018/05/21(月) 01:45:49.89 .net
そういうのはフレームワークが隠蔽すべきものだからね

26 :仕様書無しさん:2018/05/22(火) 01:50:29.87 .net
隔離スレを用意したとたん静かになったなw

27 :仕様書無しさん:2018/05/22(火) 09:05:53.76 .net
なんかね、説明が下手くそでよくわかんない。
もっとわかりやすく丁寧にDIが何故ダメなのか教えて欲しい。

ググって出てくる記事の方がわかりやすくて「DIって便利だなー」って思っちゃう。

28 :仕様書無しさん:2018/05/22(火) 11:17:17.10 .net
とても簡単な自宅で稼げる方法
参考までに書いておきます
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

U3ANT

29 :仕様書無しさん:2018/05/22(火) 13:48:41.48 .net
helloworldや数当てゲーム、石取りゲームなんかにゃ過剰。
どっかの業務基幹システムを、低品質な人海戦術でやっつけようなんて時は有用。

30 :仕様書無しさん:2018/05/22(火) 13:59:12.35 .net
age

31 :仕様書無しさん:2018/05/22(火) 19:42:25.80 .net
DIはモックフレームワークが出てきて完全に価値がなくなったね

32 :仕様書無しさん:2018/05/22(火) 20:04:15.72 .net
>>31
ねーよ

33 :仕様書無しさん:2018/05/22(火) 20:42:42.30 .net
モックの仕組みが理解できない低脳が
ユニットテストやるためにはDIしか選択肢がないから
無価値ではないか

34 :仕様書無しさん:2018/05/23(水) 02:27:01.57 .net
DIは過剰な設計で開発を楽にはしてくれない

35 :仕様書無しさん:2018/05/23(水) 05:45:13.15 .net
DIなんて実装の一作法でしか無いのに、まるでオブジェクト指向の根幹みたいな勘違いさせるスレタイってw
…あ、隔離スレかww

36 :仕様書無しさん:2018/05/23(水) 05:51:18.30 .net
DIってプロジェクト全体の依存関係の定義を一箇所で
行うから、グローバル定義になって、
オブジェクト指向とは真逆の技術なんだよね

37 :仕様書無しさん:2018/05/23(水) 07:12:04.03 .net
DI採用しないとかCOBOLとかC言語なんだろ

まあ手続きで良いと思う

38 :仕様書無しさん:2018/05/23(水) 07:48:55.96 .net
COBOLは知らんけど今時のCはOOPで書くものだよ
ユニットテストではモックに差し替えるしDIももちろん使う

39 :仕様書無しさん:2018/05/23(水) 07:55:14.24 .net
どのクラスをnewして使うべきか、というのもオブジェクトの大事な責務なのに、
それを外出しして一つにまとめて神クラス作るのがDI
DI褒めてるやつはオブジェクト指向を分かってない

40 :仕様書無しさん:2018/05/23(水) 07:56:33.55 .net
DIはスタティックおじさんの一種だなw

41 :仕様書無しさん:2018/05/23(水) 08:01:09.58 .net
>>39
大事なものだからシステマチックに管理する
DIを使わないとオブジェクトのオーケストレーションという責務がアプリケーションの全体に分散してハードコーディングされてしまう

42 :仕様書無しさん:2018/05/23(水) 08:03:13.90 .net
>>41
スタティックおじさんは正しかったって事?

43 :仕様書無しさん:2018/05/23(水) 08:15:57.00 .net
>>42
意味不明

44 :仕様書無しさん:2018/05/23(水) 09:36:26.19 .net
>>41
> オブジェクトのオーケストレーションという責務

なんで責務を増やすの?
そんなの不要なものなのに

45 :仕様書無しさん:2018/05/23(水) 12:13:12.43 .net
>>43
グローバルかつスタティックにnewを管理したいんでしょ?
スタティックおじさんじゃん

46 :仕様書無しさん:2018/05/23(水) 12:16:30.98 .net
>>45
勘でしゃべんなよ

47 :仕様書無しさん:2018/05/23(水) 12:42:27.86 .net
クラス図描かないから相関関係が曖昧になって、どこからでもインスタンス捕まえられる様にまとめて1箇所でnewするんだよ。
スタティックおじさんよりタチが悪い。

48 :仕様書無しさん:2018/05/23(水) 12:57:45.67 .net
どこからでもインスタンス捕まえられる様にまとめて1箇所でnewするという発想

なるほどこいつにはDIコンテナを与えない方がよさそうだ

49 :仕様書無しさん:2018/05/23(水) 13:14:29.61 .net
テストに有用って結局インスタンス捕まえられるからだろ?

50 :仕様書無しさん:2018/05/23(水) 15:28:07.10 .net
なんでそうなるんだよw

51 :仕様書無しさん:2018/05/23(水) 15:37:37.21 .net
ヒーブ管理を拡張して、オブジェクト生成時にユニークなID振るようなツール使えばインスタンスを捕まえる必要も無いけどな。

52 :仕様書無しさん:2018/05/23(水) 18:12:16.86 .net
スタティックおじさんというよりグローバル変数おじさん

53 :仕様書無しさん:2018/05/23(水) 19:22:58.08 .net
実際には全く逆
全てローカルで解決するにはDIするしかない
newはインスタンスがどこからともなく湧いてきていきなり管理外になってしまう
よりグローバル的な解決手段と言える

54 :仕様書無しさん:2018/05/23(水) 19:31:06.73 .net
DI使っても使う所で
newもしくは、DIコンテナから取得
するっていうのはわかるね?

newはあちこちに散らばある。
DI使えばnewが一箇所にまとまると言うが、
newの代わりにDIコンテナからの取得が
散らばるだけだっていうのは気づいてるよね?

おそらく気づいてないんだと思う。
だってDI使ってないだろ?w

55 :仕様書無しさん:2018/05/23(水) 19:37:06.15 .net
>>54
DIからの取得は野放しnewとは異なり完全に集中管理統制されている

56 :仕様書無しさん:2018/05/23(水) 19:40:09.64 .net
>>55
newがnew'になるだけだって言ってるのがわからない?

57 :仕様書無しさん:2018/05/23(水) 19:46:22.12 .net
>>56
違うのがわからない?

58 :仕様書無しさん:2018/05/23(水) 19:55:21.53 .net
>>57
やっぱり分かってないみたいねw
依存関係を登録した後のそのオブジェクトの使い方はこう
何もしないでも勝手にオブジェクトが作られるわけないよ
当たり前だけど

■ コンストラクタインジェクションの例

PicoContainer を利用するためには、以下のようなコードを書く。

public void testWithPico() {
MutablePicoContainer pico = configureContainer();
MovieLister lister = (MovieLister) pico.getComponentInstance(MovieLister.class);
Movie[] movies = lister.moviesDirectedBy("Sergio Leone");
assertEquals("Once Upon a Time in the West", movies[0].getTitle());
}

59 :仕様書無しさん:2018/05/23(水) 19:56:07.68 .net
MovieLister lister = new MovieLister の代わりが
MovieLister lister = (MovieLister) pico.getComponentInstance(MovieLister.class);
になる

60 :仕様書無しさん:2018/05/23(水) 20:19:30.78 .net
インターフェース知らないおじさんか

61 :仕様書無しさん:2018/05/23(水) 20:22:49.60 .net
そもそもDIコンテナ使うところってmainじゃないの?
DIコンテナをコンポジションしちゃうわけ?

62 :仕様書無しさん:2018/05/23(水) 20:32:12.73 .net
DI使っているフレームワーク見ればすぐ分かるのに…

63 :仕様書無しさん:2018/05/23(水) 20:39:40.61 .net
>>61
必ずしもそうとは限らない

64 :仕様書無しさん:2018/05/23(水) 20:40:21.70 .net
>>61
何言ってんの

65 :仕様書無しさん:2018/05/23(水) 21:58:39.41 .net
>>61
お前はDIコンテナのことをまったく知らずに発言してるという理解で間違いないか?

66 :仕様書無しさん:2018/05/23(水) 22:38:16.78 .net
>>61叩かれてるの何で?
DIコンテナに直接インスタンスをおねだりするケースはあまり無いと思うんだけど...

一般人が書くコードの中じゃ、@AutoWiredみたいなメタデータか設定ファイルで定義して、インスタンスを注入すれば良い。
要件が特殊か設計がマヌケな場合に、ApplicationContext.getBean()みたいなの書くハメになる。

67 :仕様書無しさん:2018/05/23(水) 23:13:12.95 .net
>>61
mainでやるのは依存関係の定義
mainでオブジェクトを全部生成してしまったら
それはライフサイクルが固定されてしまう
mainでnew(の代わりのDIコンテナからのオブジェクトの生成)をやるわけがない。
その時点でDI分かってないんだなーって思うよw

68 :仕様書無しさん:2018/05/23(水) 23:35:33.88 .net
ライフサイクルは盲点だった
DIコンテナで扱うのなんて全部ステートレスでシングルトンなサービスクラスだと思ってたよ

69 :仕様書無しさん:2018/05/23(水) 23:50:52.87 .net
>>58
案の定、使い方わからずに文句言ってただけだったなこいつ

70 :仕様書無しさん:2018/05/23(水) 23:56:40.22 .net
通常はフレームワークが生成ルートになるから、DIの生成メソッドを呼ぶなどというマヌケな事にはならない

71 :仕様書無しさん:2018/05/24(木) 03:13:24.84 .net
>>70
でもその理屈だと、newだって一緒なんだよねw
ほらね。DIだからっていうのが無くなった

72 :仕様書無しさん:2018/05/24(木) 03:50:11.89 .net
>>66
こいつwww

73 :仕様書無しさん:2018/05/24(木) 03:50:58.27 .net
>>71
なんで一緒だなんて思うのかい?

74 :仕様書無しさん:2018/05/24(木) 05:36:10.29 .net
>>73
フレームワークがnewしてるから

75 :仕様書無しさん:2018/05/24(木) 07:10:04.41 .net
>>74
DI使ったことない人がこちら

76 :仕様書無しさん:2018/05/24(木) 07:12:09.26 .net
>>67
わかってないから聞いたんじゃん
何その言い方

77 :仕様書無しさん:2018/05/24(木) 07:15:37.10 .net
DIコンテナをコンポジションするのが一般的なDIの使い方だとした場合、DIっファクトリと何が違うのん?

78 :仕様書無しさん:2018/05/24(木) 07:42:02.81 .net
>>77
何回も書いてあるだろ

再掲すると

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

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

ファクトリはプログラマが適切なタイミングで必要なオブジェクトを
ファクトリ経由で生成してもらう。依存関係はその場に記述する

DIは依存関係をひとまとめに定義する部分が独立して存在する
DIコンテナはファクトリに似ているが、関連するオブジェクトのみを扱うファクトリとは違って
DIコンテナは、全てのオブジェクトと取り扱うプロジェクトで唯一のグローバルなファクトリ

79 :仕様書無しさん:2018/05/24(木) 13:32:26.01 .net
>>78
その引用わかりにくいし、スレタイが「わかりやすく例えて教えてくれ」ってことなので、もう少し情報まとめて語ってくれません?

80 :仕様書無しさん:2018/05/24(木) 13:36:28.37 .net
>>79
わかりやすいだろ
っていうか、お前がその定義は嫌だ
認めたくないって言いたいだけだろ
あきらめろ。これがDIの定義だ

81 :仕様書無しさん:2018/05/24(木) 14:14:19.85 .net
つか、オブジェクトをnewすっから変な話になるんだよ。
全てのクラスはファクトリーが生成、戻り値はユニークなハンドルIDにして、クラス間はハンドルIDにメッセージ送って処理する様にすれば、DIが無意味な事が分かるだろ。
この仕組みなら各オブジェクトが同一CPU内に無くても巨大なネットワークの任意の場所で動いていても動かせる。
…って考えると、DIは小規模なシステムで使うくらいしか役目がないって事だ。

82 :仕様書無しさん:2018/05/24(木) 15:18:18.35 .net
意味不明

83 :仕様書無しさん:2018/05/24(木) 15:43:51.57 .net
オブジェクトをnewする

日本凄い

俺凄い

84 :仕様書無しさん:2018/05/24(木) 16:38:17.64 .net
メッセージ型のオブジェクト指向言語だと意味が無いってのは確か。

85 :仕様書無しさん:2018/05/24(木) 17:15:01.39 .net
あるオブジェクトがAに依存してますって時、
そのAをオブジェクト内部で作ろうが外部から渡そうが
何も違いないじゃん。なら余計な仕組みが要らない方がいいよね

86 :仕様書無しさん:2018/05/24(木) 17:22:25.63 .net
実装方法なんか言語仕様の範囲内でどうにでもなるんだから、瑣末な問題の重箱の隅をいつまてつついてるんだ?って話だ罠

87 :仕様書無しさん:2018/05/24(木) 17:44:06.68 .net
実装方法? 別に何かを実装しなければいけないなら
余計な仕組みがないほうが良いですよね。

88 :仕様書無しさん:2018/05/24(木) 17:51:59.74 .net
>>85
内部で作るってことはメモリとCPUが一枚の基盤に載ってるようなものでクッソ使いにくいわけだ

89 :仕様書無しさん:2018/05/24(木) 17:53:52.08 .net
>>88
その理屈はおかしい。
今やCPUにGPUがバンドルされる時代だぞ?
昔は外付けで必要だったLANカード、サウンドボードだって
随分前からマザーボードに内蔵されてる
使いにくい?逆だろう?

90 :仕様書無しさん:2018/05/24(木) 18:01:42.43 .net
>>89
そのバンドルをDIコンテナがやってんだよ
オールインワンで購入しても蓋開けたらそれぞれの部品は外して独立化できるだろ?
プログラムもそれと同じ
独立性の高い部品を個別に用意してバンドルしてシステムとして機能させる

newするってことはすべてのパーツを物理的に分離不能にくっ付けるようなもの
メモリとCPUが1枚の基盤にハンダでがっちり固められてしまったらもう使い物にならん

91 :仕様書無しさん:2018/05/24(木) 18:10:11.41 .net
パソコン例えだと使用時より製造時の方が深刻だな
メモリCPUディスプレイキーボードハードディスク…あらゆるものが結合してて同じ工場の生産ラインに異なる領域のすべての生産能力を持たせないといけない
これじゃ生産コストが高すぎる

92 :仕様書無しさん:2018/05/24(木) 18:18:28.17 .net
>>90
> オールインワンで購入しても蓋開けたらそれぞれの部品は外して独立化できるだろ?
独立化できねーよ。
お前やっぱり分かってないな。

93 :仕様書無しさん:2018/05/24(木) 18:22:33.82 .net
> メモリとCPUが1枚の基盤にハンダでがっちり固められてしまったらもう使い物にならん

最近のMac Book Proが基盤にハンダで取り付けられてるって知らないの?
https://gigazine.net/news/20161117-macbook-pro-touch-bar-teardown/


使いものにならないわけがないことは
証明済みですよね

94 :仕様書無しさん:2018/05/24(木) 18:26:57.35 .net
>>91
> メモリCPUディスプレイキーボードハードディスク…あらゆるものが結合してて同じ工場の生産ラインに異なる領域のすべての生産能力を持たせないといけない
例えが的はずれすぎる

なんで同じ工場でメモリを作らないのいけないのか?
マザーボードを作る工場で、外部から購入したメモリを
マザーボードに取り付けるだけだろ

他のもマザーボードには様々チップ、抵抗、コンデンサ等を
搭載しているが、それらを作ってるわけじゃない。
買ってきて取り付けてるだけだ

そうやって、いろんなものが統合されてるマザーボードが出来上がる

95 :仕様書無しさん:2018/05/24(木) 18:40:23.17 .net
>>77
> DIコンテナをコンポジションするのが一般的なDIの使い方だとした場合、DIっファクトリと何が違うのん?

DIはひとまとめに依存関係を定義するので
実行中に動的に違うオブジェクトに変更できない

ファクトリだったら例えば読み込む設定ファイルを
変更するだけで、使用するオブジェクトを変更できるが
DIは決まったものから変更できない

96 :仕様書無しさん:2018/05/24(木) 18:56:04.15 .net
>>93
な?
メンテナンスしにくいだろ?
CPUだけ新しいものに変えてテストできんの?
そういうこと

97 :仕様書無しさん:2018/05/24(木) 18:57:40.20 .net
>>96
? メンテナンスしないものに対して
メンテナンスできるようにするのは過剰だろ。

それに他のオブジェクトに変えたければ
再コンパイルすればいいだけ

> CPUだけ新しいものに変えてテストできんの?
じゃあもう固定で埋め込んで変えられないようにしたほうが良いですねw

98 :仕様書無しさん:2018/05/24(木) 18:57:41.21 .net
>>94
それはまさにDIの考え方
部品は別に作って組み合わせるまさにDI
newは同じ工場で作ることにあたる

99 :仕様書無しさん:2018/05/24(木) 18:59:55.99 .net
>>98
> 部品は別に作って組み合わせるまさにDI

だから、それはDIじゃねーって言ってるだろ

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

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

100 :仕様書無しさん:2018/05/24(木) 19:02:45.70 .net
工場で例えるなら、

■DIを使わない場合
マザーボードメーカー「メモリを作ってください。作り方や材料の調達は任せます」

■DIを使った場合
マザーボードメーカー「メモリを作ってください。作り方は私が指定します。材料も私が調達します」

101 :仕様書無しさん:2018/05/24(木) 19:10:14.38 .net
>>88>>90
ICチップだって元々はトランジスタとかコンデンサを一つづつ組み上げたものなんだけど、いまは一体化してるよね
あんたはCPUをバラして中からトランジスタ取り出せないから使い物にならないって言いたいの?

102 :仕様書無しさん:2018/05/24(木) 19:10:35.75 .net
何言ってんだこいつら

マックブックも作る時はDIだよ
各地から部品を調達して組み合わせてテストしてる

最終的にユーザーに届く時は美しいUIやAPIにパッケージされてるというだけ
製造過程では他と同じようにDIしてる

103 :仕様書無しさん:2018/05/24(木) 19:17:05.73 .net
>>101
そこまでいくとDIではなく
足し算や代入のような命令文の粒度だろうね
命令文にDIは必要ないだろ?
コンデンサもトランジスタもCPUの実装なんだよ

でもCPUはDIで独立性を高めた方がいいわけだな

104 :仕様書無しさん:2018/05/24(木) 19:21:34.06 .net
>>102
> マックブックも作る時はDIだよ

だからお前が言ってるのはDIじゃない

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

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

105 :仕様書無しさん:2018/05/24(木) 19:23:00.50 .net
マックブックも作る時はDIを使ってないよ
各地から部品を調達して組み合わせてテストしてる

けっして部品を調達する時に、
その部品に依存するものまで調達して、
これ使ってくれと渡してなんかしていない

106 :仕様書無しさん:2018/05/24(木) 19:26:34.89 .net
独立性を高めるっていうことは、
そのパーツを作ってる会社に
使う部品は任せるってことやで

107 :仕様書無しさん:2018/05/24(木) 19:41:13.09 .net
newを使うってのはさ
パソコンでいうならパーツ集めて全部くっつけて
あとメモリだけ乗っけたら売り物になるっていう状態にして
開発中のメモリを刺して刺しっぱなしにしたまま開発を進めるようなものだよ

DIだと
メモリはメモリで独立して作って後で組もうぜって感じな

108 :仕様書無しさん:2018/05/24(木) 19:43:12.62 .net
ここ3日でナンバーワンのヘタクソな例えわろたw

109 :仕様書無しさん:2018/05/24(木) 19:45:40.87 .net
>>107
そうじゃない

普通は大きいものを作るときは、
それよりも小さいものに分けて作る
小さいものがどうやって作られてるかは意識しない
オブジェクトが階層構造を持っている

DIはその階層構造を破壊するもの

110 :仕様書無しさん:2018/05/24(木) 19:53:33.81 .net
DI凄い

俺凄い

111 :仕様書無しさん:2018/05/24(木) 20:24:14.23 .net
具体的なクラスはコードから追い出して外出しにしたいなー
→全部抽象にしよ
→抽象はnewできないじゃん…かといって具体的なクラスnewしたら本末転倒だし…メンバー変数とかどうすんの
→そもそもnewしなきゃいいじゃん、newは他に任せてセッター用意しとこ
みたいのがDIだと思ってた

112 :仕様書無しさん:2018/05/24(木) 20:33:43.89 .net
>>109
ネットワークと繋がるアプリケーションを考えろ
アプリケーションはネットワークより小さいものだが
アプリケーションはネットワークへのアクセスをインジェクションして内部に抱えることができる

113 :仕様書無しさん:2018/05/24(木) 23:31:14.29 .net
>>112
インジェクションおじさん?
言っていることが意味不明だよ

アプリケーションとネットワークは
レイヤーが違う

114 :仕様書無しさん:2018/05/24(木) 23:35:56.71 .net
ジャップがいなくなれば良いのに

115 :仕様書無しさん:2018/05/24(木) 23:38:34.63 .net
いまどきはウェブアプリだらけだけどな。
ちょっとしたソシャゲなんかモロにな。

116 :仕様書無しさん:2018/05/24(木) 23:53:57.33 .net
>>111
ストラテジーパターンと違うのは
DIは何のためにそうするのかという理由がないんだよね

ストラテジーパターンは戦略を変更可能にする
という理由があるからそうしている

でも、具体的なクラスをコードから追い出した所で
結局インターフェースは追い出せない。
抽象クラスにした所で、結局そこに入る具象クラスは決まってる

117 :仕様書無しさん:2018/05/25(金) 02:54:15.01 .net
インターフェースを追い出すって何したいんだ?

118 :仕様書無しさん:2018/05/25(金) 03:25:58.12 .net
さぁ? そもそもクラスすら
追い出す必要はないって
話だからなぁ

119 :仕様書無しさん:2018/05/25(金) 03:33:09.82 .net
強い依存と弱い依存という考え方があるんだろうね
違いは、クラスAがクラスBを使用している時

強い依存というのは、クラスBのみでテストできず、
必ずクラスA相当のものが必要になるもの

弱い依存っていうのはその逆でクラスBのみでテストできるもの
弱い依存の場合、クラスBのみでテストできて完全に動くことが証明できるもの
この場合、クラスAは使用しているクラスBに不具合がないという前提で開発できる
この場合、DIなんかつかって外から入れ込まなくても、内部で生成して問題ない
クラスBへの依存は存在するが、その依存が悪影響を与えることはない

なぜなら信用できないクラスBの代わりにテスト用のクラスBのモックを使う必要がないから
クラスBが信用できるので、そのままクラスBを使えば良い

120 :仕様書無しさん:2018/05/25(金) 06:27:58.53 .net
DI否定派が多いのはわかった。

しかし、DI否定してるちゃんとした記事がないのは何故なんだ?
頼むからもっとわかりやすくまとめてくれ!そのための記事だろう?
オブジェクト思考がわからん奴にもわかるくらいに書いてくれよ!

さっぱりわからん

121 :仕様書無しさん:2018/05/25(金) 07:57:55.49 .net
>>120
否定したいやつがわざわざこんなとこにくるのさ

122 :仕様書無しさん:2018/05/25(金) 08:00:18.68 .net
>>121
なるほど、納得だわ

123 :仕様書無しさん:2018/05/25(金) 08:05:32.27 .net
DI好きは本来は関数型言語を使った方が良いんだけど
低脳すぎて使えないんだよ
かわいそうに

124 :仕様書無しさん:2018/05/25(金) 08:50:13.78 .net
奴隷の嫉妬でした

125 :仕様書無しさん:2018/05/25(金) 08:51:56.21 .net
使いたきゃ使えばいい
使いたくないなら使わなきゃいい
それでいいじゃないか

126 :仕様書無しさん:2018/05/25(金) 09:05:05.59 .net
>>119
何言ってるかわかんねぇ。
AがBを利用してんなら、AとBが強い依存関係にしろ弱い依存関係にしろ、Bは単独でテストできるだろ。単独でテスト出来ない方はむしろAだろ。

127 :仕様書無しさん:2018/05/25(金) 09:13:33.23 .net
今来たばかりの者だけど、最新50コメント読んで疑問生まれたので質問です。

クラスAの中でBを利用してる場合、クラスAの中で直接Bをインスタンス化した時に困るケースって、テストが出来る出来ないというよりは、Bを同じインターフェースをもったCに変えたいとか、そういう柔軟性の為ですよね?
テストの話するならクラスAの中で直接インスタンス化する場合でも、先にクラスBのテストを通すようにしておけば、クラスAの中で直接Bを使っててもBは信頼出来るものになってるからクラスAのテストに影響しないですよね。

128 :仕様書無しさん:2018/05/25(金) 09:23:42.44 .net
DIの代わりにファクトリーパターン使って、クラスAの中で使う別クラスを柔軟に変えられるようにするのではダメなのですか?

129 :仕様書無しさん:2018/05/25(金) 09:35:59.99 .net
> クラスAの中でBを利用してる場合、クラスAの中で直接Bをインスタンス化した時に
> 困るケースって、テストが出来る出来ないというよりは、Bを同じインターフェースを
> もったCに変えたいとか、そういう柔軟性の為ですよね?

DIを使う場合、あらかじめ「クラスAはクラスBを利用します」と
静的に定義するので、アプリ実行中に動的にCに変えることはできないのです。
(もちろんコードを修正してアプリを再起動したら変更できますが)

一方、動的にBを同じインターフェースをもったCに変えたいときに
使うのはストラテジーパターンです。

ストラテジーパターンは戦略(アルゴリズム)を変更したいという
要求があるので、同じインターフェースを持ったB、C、D、E・・・が
作られるのは当然ですが、DIでは動的に変更できないので
同じインターフェースを持ったCが作られることはあまりありません。

実質クラスAで使用するものはクラスB決め打ちです。
つまり柔軟性が必要ない場合にDIを使うことになるわけです。
必要ない柔軟性を持たせることはYAGNIです

> テストの話するならクラスAの中で直接インスタンス化する場合でも、
> 先にクラスBのテストを通すようにしておけば、クラスAの中で直接Bを使ってても
> Bは信頼出来るものになってるからクラスAのテストに影響しないですよね。

はい、そのとおりです。

130 :仕様書無しさん:2018/05/25(金) 09:44:26.32 .net
>>129
ありがとうございます。それってDIをする時の話というよりかは、DIコンテナを使うことが前提とした上でDIする時の話ではないのですか?

131 :仕様書無しさん:2018/05/25(金) 09:46:41.20 .net
>>129
これはDI不要派としての説明でしょうか?

132 :仕様書無しさん:2018/05/25(金) 09:52:29.97 .net
ストラテジーパターンってファクトリーパターン使うときに使いますよね?

133 :仕様書無しさん:2018/05/25(金) 09:57:13.63 .net
>>130
DIはDIコンテナを使うことを前提としたパターンです。
DIコンテナ相当のことを手動でやると
小さなプログラム以外では大変すぎるので、
DIコンテナというアイデアで解决したのがDIなのです。

134 :仕様書無しさん:2018/05/25(金) 10:02:11.41 .net
>>133
逆ではないのですか?DI手段でやるのしんどいからそれを解決するのがDIコンテナかと思ってました。

135 :仕様書無しさん:2018/05/25(金) 10:06:46.72 .net
>>134
DIはパターン名です。

あるクラスのコンストラクタを、別のクラスのオブジェクトを引数にして
呼び出すことをDIと言ってはいけません。

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

 > Dependency Injection の形式
 > Dependency Injection の基本的な考え方は、独立したオブジェクトを
 > Assembler(組み立て係)として用意し、

136 :仕様書無しさん:2018/05/25(金) 10:14:08.27 .net
>>135
https://msdn.microsoft.com/ja-jp/library/ff921087.aspx

自分の言ってるDIは制御の反転のことであって、DIのことではなかったのですね。制御の反転の実装パターンがdiやサービスロケーターってやつなのですね。

137 :仕様書無しさん:2018/05/25(金) 10:20:47.78 .net
>>136
その図はわかりやすいね。これからそれも利用していこう

138 :仕様書無しさん:2018/05/25(金) 10:22:47.70 .net
>>137
制御の反転自体にはメリットあるけど、diパターンは不要って話ですか?

139 :仕様書無しさん:2018/05/25(金) 10:28:11.56 .net
>>138
DIパターンはコスト0で使用できるものじゃない。
本来はクラスの責務である依存関係を、別に定義しなければいけないのと
インターフェースを別に作る必要がある
それだけのコストを支払うメリットがない

140 :仕様書無しさん:2018/05/25(金) 10:37:21.61 .net
ちゃんと書いてあるなw

> デメリット
> 制御の反転パターンには、次のようなデメリットがあります。
>
> 初期化しようとするオブジェクトに必要な依存関係を提供するメカニズムを実装する必要がある。
> ソース コードの複雑さが増し、理解が困難になる。

141 :仕様書無しさん:2018/05/25(金) 10:48:24.49 .net
制御の反転およりDIが"問題"の唯一の解決手段だと考えるのがだめなんだよ。

制御を反転というのは、反転、つまり正しい流れから逆なわけだよね
逆にしないで正常の流れのまま、問題を解決するほうが良いだろう?

142 :仕様書無しさん:2018/05/25(金) 11:22:25.48 .net
https://msdn.microsoft.com/ja-jp/library/ff921152.aspx

> デメリット
> 依存関係の挿入パターンには、次のようなデメリットがあります。
>
> 管理するソリューション要素が増える。
> オブジェクトを初期化する前に、依存関係の挿入フレームワークがオブジェクトに必要な依存関係を解決できることを確認する必要がある。
> ソース コードの複雑さが増し、理解が困難になる。

143 :仕様書無しさん:2018/05/25(金) 12:11:32.65 .net
>>141
制御の反転はパターンとか考え方みたいなのものだから
それを適用した制御のフローを正しいとか正しくないとか言うのはナンセンスだと思う

144 :仕様書無しさん:2018/05/25(金) 12:14:39.00 .net
>>141
反転しないとインターフェースが汎用的で大規模になりメンテナンスコストが膨大となる
そういうのはライブラリやサービスの提供ベンダーがやる仕事

反転してない例あげるとADO.NETなどのデータプロバイダー
これに対して反転してる例はリポジトリパターン

145 :仕様書無しさん:2018/05/25(金) 14:46:31.80 .net
>>143
DIはメンテナンスコストを上げてまで
依存関係を分離させるパターンだよ

DIでメンテナンスコストなんて下がらない

146 :仕様書無しさん:2018/05/25(金) 14:46:52.50 .net
>>145>>144へのレスの間違い

147 :仕様書無しさん:2018/05/25(金) 15:17:17.09 .net
>>141
正常の流れってのがよくわからんけど、それでどう問題解決するの?

148 :仕様書無しさん:2018/05/25(金) 15:25:13.15 .net
>>147
そもそも"問題"だと思っているものが問題じゃないんですよ

頭のいい馬鹿は問題があればそれを解决しなきゃ
どんなコストを支払ってでも!って考えますが、

問題はあるが少しコストを支払って、許容範囲に
おさめれば、それは問題ではなくなるんですよ


なにをいってるのかわからないでしょうね。
要するに依存しててもいいじゃない
少し面倒になるだけでしょう。という話です。

149 :仕様書無しさん:2018/05/25(金) 15:34:25.42 .net
>>148
一言で言うとトレードオフってことね。

150 :仕様書無しさん:2018/05/25(金) 15:36:04.67 .net
関数型メインだから勝手に問題消滅してるわ。テスタブルなコードばかりだし。

151 :仕様書無しさん:2018/05/25(金) 16:55:46.11 .net
>>150
どんな言語でなにを作ってるの?

152 :仕様書無しさん:2018/05/26(土) 15:38:49.75 .net
>>316の図見てもDIコンテナを使って初めてDIと呼べる
なんて思えないんだけど。ビルダーってメインが役割果たしてもいいわけだろう?

て言うかなんでDIコンテナ使うの前提でDIと呼べるのにDIなんて言葉があるの?
誰がなんの得があって名前を分けたの?

153 :仕様書無しさん:2018/05/26(土) 15:40:05.50 .net
このスレに居座ってるDIアンチは毎回同じわけわからんリンク貼るし、誰かもっとわかりやすく教えて

154 :仕様書無しさん:2018/05/26(土) 16:34:29.27 .net
アンチの主張は間違ってるのだからわかりやすく説明することはできないよ
1 + 1 = 3であることをわかりやすく説明するようなものでそれは不可能だ
間違ってることを説明しようとするから筋が通らず支離滅裂でわかりにくくなる

155 :仕様書無しさん:2018/05/26(土) 17:17:22.73 .net
間違ってると主張したいのなら、
間違ってる理由の一つでも書いたら?

156 :仕様書無しさん:2018/05/26(土) 17:20:07.14 .net
>>152
なにが言いたいのか分からんが、普通のことだろ?
例えばObserver パターンでは
ObserverとSubjectという名前に分かれている

157 :仕様書無しさん:2018/05/26(土) 17:39:36.21 .net
>>153
> このスレに居座ってるDIアンチは毎回同じわけわからんリンク貼るし、誰かもっとわかりやすく教えて

お前それ、今まで何回言ったよ?
お前が望む答えが今まで出てないのが
何よりの証拠だよ。

DIアンチが言ってることが正しい

158 :仕様書無しさん:2018/05/26(土) 18:13:36.69 .net
>>156
おー、やるねー。

159 :仕様書無しさん:2018/05/27(日) 02:48:11.08 .net
>>156
それとは全然違う。

DIコンテナが主なのに
DIって独立した名前があるんだぜ?

160 :仕様書無しさん:2018/05/27(日) 07:29:58.13 .net
>>159
DIコンテナが主ってなんだそれ?

DIパターンを構成する要素の一つとして
DIコンテナがあるってだけだろ

えとさぁ、苦し紛れに適当なこと言うの止めてくれない?

161 :仕様書無しさん:2018/05/27(日) 10:33:35.30 .net
>>160
DIコンテナ使わなかったらDIと言えないんだろう?

162 :仕様書無しさん:2018/05/27(日) 10:39:06.86 .net
言えるよ

163 :仕様書無しさん:2018/05/27(日) 10:40:21.14 .net
>>161
Observerパターンでは
ObserverもSubjectも使わなければ
Observerパターンにはなりませんよ

164 :仕様書無しさん:2018/05/27(日) 10:41:51.96 .net
>>162
言えない。それは結論が出てる
混ぜっ返すな。リンク先よく読んで勉強しろ
https://msdn.microsoft.com/ja-jp/library/ff921087.aspx
実装の詳細の右側の図「依存関係の挿入」がDIパターンだ

165 :仕様書無しさん:2018/05/27(日) 10:56:12.26 .net
>>164
何言ってんだ?

依存性を注入してればDIだよ
そんで注入するための手段は無数にあって
DIコンテナはそのうちの1つのパターンでしかない

DIコンテナがなくてもDIは成立する
これ基本中の基本だからそろそろ理解してくれないかな

166 :仕様書無しさん:2018/05/27(日) 11:04:22.49 .net
> 依存性を注入してればDIだよ
嘘つくな。誰がそんな事言ってるんだ?

こちらはソースをちゃんと示せる。
お前は今まで一つも示せてない
個人ブログはソースじゃないからな

マイクロソフト
https://msdn.microsoft.com/ja-jp/library/ff921087.aspx
↑の詳細情報に書いてある
「制御の反転パターンの詳細については、以下の情報を参照してください。」
のリンク先

Fowler の Web サイトの「Inversion of Control Containers and the Dependency Injection pattern」
https://www.martinfowler.com/articles/injection.html

167 :仕様書無しさん:2018/05/27(日) 11:06:48.54 .net
実装の詳細
制御の反転 (IoC: Inversion of Control) パターンを実装する方法はいくつかあります。
依存関係の挿入 (DI: Dependency Injection) パターンとサービス ロケーター (SL: Service Locator) パターンは、
このパターンの特殊なバージョンで、異なる方法で実装されます。図 2 に、この 2 つのパターンの概念図を示します。

https://i-msdn.sec.s-msft.com/dynimg/IC258669.png

168 :仕様書無しさん:2018/05/27(日) 11:08:35.07 .net
>>166
はぁ?
まずはMicrosoftやFowlerが正しい事を言ってるという数学的根拠を示せよ
誰々が言ってたから正しいって論法はホントばかばかしいんだよね

169 :仕様書無しさん:2018/05/27(日) 11:09:23.12 .net
その理屈だと>>168は自分が正しいって
根拠を示さなければならないはずだよね?

170 :168:2018/05/27(日) 11:10:06.04 .net
うるさいうるさいうるさーい
俺が言ってるんだから、俺が正しいんだ。
俺が言ってることが根拠!
ばーかばーか

171 :仕様書無しさん:2018/05/27(日) 11:10:45.40 .net
やれやれ、またトチ狂ったかw

172 :仕様書無しさん:2018/05/27(日) 11:15:30.11 .net
マーチンファウラーはDIの名付け親
マーチンファウラーは「こういうものをDIと名付けます」と
言ってることに対して、他人が、それはDIじゃないと
いっても、バカにされるぞw

173 :仕様書無しさん:2018/05/27(日) 11:17:25.33 .net
>>169
俺は理を語ってるだけだ
理には俺という権威は必要ない
数学の証明と同じこと

@
依存性の注入(DI)とは
依存性を注入することである

これは自明である

A
依存性の注入を実装する方法は複数存在する
DIコンテナはその一種でしかないので必須要素ではない

これは二種類以上例を挙げれば証明できる
例1 DIコンテナパターン
例2 貧者のDIパターン


はい終わり
この理は誰々が言ってたとか関係ねえんだよ

174 :仕様書無しさん:2018/05/27(日) 11:19:23.42 .net
>>173
お前が言ってることは間違ってる
これも自明なんだが?

前提わかってるか?

175 :仕様書無しさん:2018/05/27(日) 11:20:14.27 .net
>>174
自明じゃないので証明してみな

176 :仕様書無しさん:2018/05/27(日) 11:21:57.15 .net
1. DIという用語を作ったのマーチンファウラーである
これは自明

2. このサイトがマーチンファウラーのサイトである
https://www.martinfowler.com/articles/injection.html
(翻訳) https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html#FormsOfDependencyInjection

これも自明

3. DIの基本的な考え方は独立したオブジェクトをAssember(組み立て役)として用意する

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

これも自明

177 :仕様書無しさん:2018/05/27(日) 11:22:18.24 .net
>>175

>>176にて証明しました。

178 :仕様書無しさん:2018/05/27(日) 11:30:20.45 .net
>>176
1. 自明じゃない
M.F.が初出という証拠がない

2. だからなんだ

3. これはむしろDIコンテナは必須ではないということだがよろしいか?
組み立て役は組み立てれればいいのでDIコンテナである必要はない

179 :仕様書無しさん:2018/05/27(日) 11:30:54.40 .net
Service Locator と Dependency Injection ってなにが違うの?

https://msdn.microsoft.com/ja-jp/library/ff921087.aspx
https://i-msdn.sec.s-msft.com/dynimg/IC258669.png の図より

Service Locator には、サービスロケーターがあって、
Dependency Injection には、その代わりに
ビルダーっていうのがあるのはわかった。
そのビルダーっていうのがDIコンテナと
呼ばれているものであることもわかった

重要な違いは、
Service Locator は、サービスロケーター があって
Dependency Injection には、ビルダー(DIコンテナ)がある
ってことでいいの?

180 :仕様書無しさん:2018/05/27(日) 11:31:11.27 .net
>>179
はい、そのとおりです。

181 :仕様書無しさん:2018/05/27(日) 11:34:03.41 .net
>>178
> 1. 自明じゃない
> M.F.が初出という証拠がない

見事に罠に引っかかったなw
わざと書かなかったんだよ

これ明らかにマーチンファウラーが初出なんだな。
それも https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html
にかかれている

> 本記事では、このパターンの働きについて掘り下げることで、より具体的に
> 「Dependency Injection(依存オブジェクト注入)」と命名し、 これを Service Locator の代替案として比較する。

> 結論をいえば、このパターンにはもっと明確な名前が必要なように思う。 「制御の反転」という用語では包括的すぎる。
> これでは混乱する人が出てくるのも無理はない。 様ざまな IoC 支持者と多くの議論を重ねた末、
> その名前は Dependency Injection (依存オブジェクト注入)に落ち着いた。

この記事で命名されたんだよ

182 :仕様書無しさん:2018/05/27(日) 11:36:26.12 .net
>>181
は?
MFが書いた記事より以前の全ドキュメントを列挙してDIの記述がないことを示せよ
それが論理的な証明ということだぞ?

183 :仕様書無しさん:2018/05/27(日) 11:36:39.95 .net
念の為、訳ではなく原文も書いておこうか

https://martinfowler.com/articles/injection.html

> As a result I think we need a more specific name for this pattern.
> Inversion of Control is too generic a term, and thus people find it confusing.
> As a result with a lot of discussion with various IoC advocates
> we settled on the name Dependency Injection.

184 :仕様書無しさん:2018/05/27(日) 11:37:36.56 .net
>>182
なんでそこで悪魔の証明を持ち出すのかなw
お前がネタで書いてるのバレバレやんwwww

185 :仕様書無しさん:2018/05/27(日) 11:38:28.04 .net
悪魔が存在しないことを示せ
存在しないことを示せなければ
悪魔は存在するということだ
だっけ?w

186 :仕様書無しさん:2018/05/27(日) 11:41:20.58 .net
みなさんお開きにしましょうか?
DIはDIコンテナを使うパターンであると
わかった上で、言葉遊びでしてるだけなんですよ
そんなやつに真面目に付き合う必要はありません。

187 :仕様書無しさん:2018/05/27(日) 11:44:16.83 .net
適当なブログに命名したって書いたら発案者になってしまうなら楽なもんだよな

IT業界では真新しいように宣伝してるけどもっと昔からあったよね、って事例はごまんとあるんだよ
MFの自称発明者ってのが事実なら証明してみな

188 :仕様書無しさん:2018/05/27(日) 11:46:16.69 .net
> 適当なブログに命名したって書いたら発案者になってしまうなら楽なもんだよな

楽じゃないよ

> As a result with a lot of discussion with various IoC advocates
> we settled on the name Dependency Injection.

> 結論をいえば、このパターンにはもっと明確な名前が必要なように思う。
> 「制御の反転」という用語では包括的すぎる。これでは混乱する人が出てくるのも無理はない。
> 様ざまな IoC 支持者と多くの議論を重ねた末、その名前は Dependency Injection (依存オブジェクト注入)に落ち着いた。

こう書いてあるだろ?

IoC 支持者と多くの議論を重ねて命名したんだよ
お前にそれができるか?

189 :仕様書無しさん:2018/05/27(日) 11:48:52.59 .net
だからそれも自称IoC支持者と自称多くの議論でしかないんだよ
そういうつぶやきじゃなくて最低限、議事録をだせよ

190 :仕様書無しさん:2018/05/27(日) 11:51:03.39 .net
>>189
それで代わりにお前はなにを出すんだ?

191 :仕様書無しさん:2018/05/27(日) 11:51:35.04 .net
DIコンテナ必須派ってさいつもこうだよな
MFとかいう面識もない殆ど空想上のおっさんが言ってた、っていうくだらない根拠しか提示できない
おっさんの権威を認めなければこんなにも簡単に崩れ去るロジックしか示せない
まったくもって片腹痛いわ

192 :仕様書無しさん:2018/05/27(日) 11:52:19.10 .net
>>190
>>173という完全なロジックを出すよ

193 :仕様書無しさん:2018/05/27(日) 11:56:00.52 .net
>>192
いや、議事録だよ。
お前が言ってることが正しいという
議事録を出せって言ってる

194 :仕様書無しさん:2018/05/27(日) 11:57:07.95 .net
>>192
お前が、自称IoC支持者と多くの議論をしたんだろ?
だからその議事録を出せって
まさか、議事録もないのに、お前の言ってることを
信じろって言ったのか?

195 :仕様書無しさん:2018/05/27(日) 12:00:09.45 .net
Martin Fowler's original article that introduced the term Dependency Injection
https://martinfowler.com/articles/injection.html

だって。Dependency Injectionという用語を作ったのはMartin Fowlerであってるっぽい

196 :仕様書無しさん:2018/05/27(日) 12:02:50.59 .net
人々「まあ地動説だよな再現性ある実験レポートもあるし」
馬鹿「天動説」
人々「ん?」
馬鹿「天動説が正しいんだが?」
人々「は?根拠は?」
馬鹿「教会がそう言ってた。聖書にも書いてある」
人々「あほくさ」

197 :仕様書無しさん:2018/05/27(日) 12:16:56.80 .net
人々「まあ地動説だよな再現性ある実験レポートもあるし」
馬鹿「オレオレDI」
人々「ん?」
馬鹿「俺が言ってることが正しいんだが?」
人々「は?根拠は?」
馬鹿「俺がそう言ってた。5chにも書いてある」
人々「あほくさ」

198 :仕様書無しさん:2018/05/27(日) 12:20:14.25 .net
>>197
地動説の置き換えが思いつかなかったんだなwwwwwwwwwww

199 :仕様書無しさん:2018/05/27(日) 12:21:01.46 .net
宇宙には上も下もないし、そもそも中心も無いんだから、重量で中心という概念を作れば地動説、人間中心主義で考えれば天動説、ただそれだけの話。
そもそも世界の中心という発想は人が作り出した概念に過ぎないのだから。

200 :仕様書無しさん:2018/05/27(日) 12:22:04.62 .net
そりゃ、独自解釈の誰も言ってないものに対して
名前なんかあるわけがない

だからさっきから、それがDIの正しい定義だというのなら
それが書いてあるところと、お前がIoC支持者と議論したと
いうのなら、その証拠を出せって言ってるんだが

っていうかお前誰だよ?
マーチンファウラーの知名度に勝てるとでも思ってんのか?

201 :仕様書無しさん:2018/05/27(日) 12:23:57.61 .net
>>200
俺を知らないのか?
モグリだぞ

202 :仕様書無しさん:2018/05/27(日) 12:24:25.30 .net
>>201
じゃあお前とマーチンファウラーを比べてやるから
名前言えよ。その勇気があるのならな

203 :仕様書無しさん:2018/05/27(日) 12:24:59.48 .net
>>202
俺は神だ。違うというのなら俺が神でない証拠をもってこいw

204 :仕様書無しさん:2018/05/27(日) 12:25:22.76 .net
マーチンファウラー VS 自称神wwww

205 :仕様書無しさん:2018/05/27(日) 12:25:23.75 .net
俺の理論はさっき示した

そしてそれは知名度とか関係ない理

MFの権威にすがった破綻した屁理屈とは違うのだよ

206 :仕様書無しさん:2018/05/27(日) 12:26:20.30 .net
なんだ、宗教か。

207 :仕様書無しさん:2018/05/27(日) 12:26:38.99 .net
>>205
それはオレオレDIですねwwww

208 :仕様書無しさん:2018/05/27(日) 12:27:00.82 .net
神の理論は示されたwww

209 :仕様書無しさん:2018/05/27(日) 12:27:32.12 .net
>>205
誰がお前の説なんか信用すると思ってるんだ?
馬鹿じゃないのかな?

210 :仕様書無しさん:2018/05/27(日) 12:28:20.48 .net
>>209
神の言うことを信じなさい

211 :仕様書無しさん:2018/05/27(日) 12:29:16.61 .net
5chで間違った説を流布しないでくれませんかね?
まあ普通、5chに書いてあった!と言ったところで
誰も信用しませんが
だから外部のソースを示すことが説得力につながるわけで

212 :仕様書無しさん:2018/05/27(日) 12:30:57.77 .net
まあここで、俺が言っていることは正しい!
そのことを外部のソースを示して証明してやる!
って言えない時点で、ちっせぇよなw

213 :仕様書無しさん:2018/05/27(日) 12:32:51.04 .net
名を明かさず5chであれこれ言っていても
マーチンファウラーほどの説得力はないという
当たり前の結論でした

214 :仕様書無しさん:2018/05/27(日) 12:35:23.59 .net
少し考えてほしい。
マーチンファウラーは信用できない
ということは、相対的に考えると
俺は信用できるということではないだろうか?

215 :仕様書無しさん:2018/05/27(日) 12:36:09.64 .net
>>214
ねーよwwww
いくらマーチンファウラーがーって言おうが
お前もお前の言ってることも信用出来ないことは
変わらねーよw

216 :仕様書無しさん:2018/05/27(日) 12:38:21.71 .net
Service Locator と Dependency Injection ってなにが違うの?

https://msdn.microsoft.com/ja-jp/library/ff921087.aspx
https://i-msdn.sec.s-msft.com/dynimg/IC258669.png の図より

Service Locator には、サービスロケーターがあって、
Dependency Injection には、その代わりに
ビルダーっていうのがあるのはわかった。
そのビルダーっていうのがDIコンテナと
呼ばれているものであることもわかった

重要な違いは、
Service Locator は、サービスロケーター があって
Dependency Injection には、ビルダー(DIコンテナ)がある
ってことでいいの?

217 :仕様書無しさん:2018/05/27(日) 12:38:45.24 .net
>>216
はい、そういうことです。

218 :仕様書無しさん:2018/05/27(日) 13:10:07.72 .net
> 依存性を注入してればDIだよ
> そんで注入するための手段は無数にあって
> DIコンテナはそのうちの1つのパターンでしかない
>
> DIコンテナがなくてもDIは成立する
> これ基本中の基本だからそろそろ理解してくれないかな

>>153だけど、俺も単純にこう思うんだよなあ。
で、毎回マーチンファウラーのリンクばかりでわけわからん。もう少しわかりやすく例えて説明してほしい。
そのためのスレなんだから。

219 :仕様書無しさん:2018/05/27(日) 13:13:01.68 .net
それにマイクソの記事のビルダーってDIコンテナじゃなくてメインでもいいんだろう?

220 :仕様書無しさん:2018/05/27(日) 13:14:29.20 .net
>>218
わけわからんなら勉強しろって

お前がわからない=間違いじゃないんだから、
まずマーチンファウラーが言ってることは正しいと
認めた上で勉強しろ。

っていうかそれをやらないから理解できないんだろ。
間違ったことを前提にして進めてるからだめなんだぞ

221 :仕様書無しさん:2018/05/27(日) 13:15:40.74 .net
>>209
信用とか必要ない

事実を示しただけ

1+1=2が正しいことはお前が信じなくても信じてもかわらない

222 :仕様書無しさん:2018/05/27(日) 13:15:58.67 .net
>>219
> それにマイクソの記事のビルダーってDIコンテナじゃなくてメインでもいいんだろう?

メインはエントリーポイントでオブジェクトではないので
「使う」ことができない

まずメインから、処理の部分をオブジェクトに分離する
そしてそれをDIコンテナと名付ければ良い

223 :仕様書無しさん:2018/05/27(日) 13:16:41.34 .net
>>221
俺の言ってることが事実なんだー!
っていうのはいらないから(大爆笑)

224 :仕様書無しさん:2018/05/27(日) 13:16:55.86 .net
マーチン教やばすぎ

225 :仕様書無しさん:2018/05/27(日) 13:17:35.23 .net
そりゃな、世界でもトップクラスの
アーキテクトだし

5ちゃんねるで騒いてるガキとは
レイヤーが違うよw

226 :仕様書無しさん:2018/05/27(日) 13:18:37.44 .net
>>173で結論でたね
宗教家の方はおかえり願います

227 :仕様書無しさん:2018/05/27(日) 13:18:39.89 .net
まあこう書いてあるしな。
独立させたオブジェクトにしないといけない

 > Dependency Injection の形式
 > Dependency Injection の基本的な考え方は、独立したオブジェクトを
 > Assembler(組み立て係)として用意し、 MovieFinder インタフェースの実装を

228 :仕様書無しさん:2018/05/27(日) 13:19:15.56 .net
>>226
それは間違いだって結論出てる。
なぜなら5ちゃんねるで騒いてるガキしか
言ってない。正しいと証明されていない

229 :仕様書無しさん:2018/05/27(日) 13:19:55.15 .net
なるほど。独立したオブジェクトとして用意する所がキモなんですな

230 :仕様書無しさん:2018/05/27(日) 13:20:47.25 .net
>>228
やれやれ
間違いというなら証明してみなよ
おっとでもマーチンおじさんの引用で証明とか言わんでくれよな
それは証明じゃなく証言でしかないからな

231 :仕様書無しさん:2018/05/27(日) 13:21:20.80 .net
https://msdn.microsoft.com/ja-jp/library/ff921152.aspx
> クラスでは、依存関係のインスタンスを明示的に作成せず、
> クラスの定義で宣言を使用して依存関係を表現します。
> Builder オブジェクトを使用して

たしかにビルダーはオブジェクトではならないといけないようですな

232 :仕様書無しさん:2018/05/27(日) 13:21:48.45 .net
>>230
> 間違いというなら証明してみなよ

正しいということを証明してみなよ

233 :仕様書無しさん:2018/05/27(日) 13:22:16.83 .net
はいはいどっちもバカ

234 :仕様書無しさん:2018/05/27(日) 13:22:48.46 .net
DIと呼ばれる概念はもう少し抽象度が高いと思うんだよね

それをマーチン教のDIアンチは、DIはDIコンテナを使うことだ!って信じてやまないわけ

そのせいでもう3スレ目に突入ですよ。
勝手にタイトルも変えちゃうし

235 :仕様書無しさん:2018/05/27(日) 13:23:04.16 .net
結局、間違ったことを書いて、
間違っていることを証明してみせよって
言ってるだけなんだよなw

236 :仕様書無しさん:2018/05/27(日) 13:25:31.82 .net
DIは依存性注入
で、応用として面倒な生成をらくちんにしてくれるDIコンテナってシンプルな考えじゃダメなの

237 :仕様書無しさん:2018/05/27(日) 13:25:44.19 .net
>>235
議論がなりたたないわけだ。
本来は自分が証明するという義務を果たさないで文句ばかり言う。
DIがどうとか以前に、人間として失格

238 :仕様書無しさん:2018/05/27(日) 13:27:44.47 .net
組み立て役が独立したオブジェクトである必要はないよ
貧者のDIパターンという世界的にも有名なパターンがあって
これはコンストラクタインジェクションのデフォルトパラメーターを利用したDIのバリエーションのことなんだ
このパターンはファクトリ不要なので「 D I コ ン テ ナ も 不 要 」なんだよ

239 :仕様書無しさん:2018/05/27(日) 13:28:05.95 .net
>>236
定義が間違ってるからだめ。
そのせいでなんでもインジェクションと言うインジェクションおじさんが生まれた

インジェクションおしさんは
オブジェクトを渡してコンストラクタを呼びだしたり、
関数にオブジェクトを渡すことまでインジェクションとか言い出したからな
そのうちStringもオブジェクトだから、printfにStringをインジェクションするとか言い出すだろう

240 :仕様書無しさん:2018/05/27(日) 13:28:29.07 .net
>>238
> 組み立て役が独立したオブジェクトである必要はないよ

だーかーらー、
それを証明しろって
何度言われれば理解するんだ

241 :仕様書無しさん:2018/05/27(日) 13:28:54.20 .net
約 12,400 件 (0.63 秒)
"貧者のDIパターン"との一致はありません。

242 :仕様書無しさん:2018/05/27(日) 13:30:05.54 .net
あったぞwww
検索して調べられるものは
嘘か本当かすぐ見わかって楽しいなぁwww

貧者のDI(いちおう閲覧注意w)
http://kumaneco-zatsugidan.blogspot.jp/2013/08/blog-post_7.html

243 :仕様書無しさん:2018/05/27(日) 13:30:42.11 .net
>>241
poor man's dependency injection

244 :仕様書無しさん:2018/05/27(日) 13:30:50.04 .net
>>240
俺が言ってるから正しい
5ちゃんねるに書いてあるのが証拠だ

245 :仕様書無しさん:2018/05/27(日) 13:31:33.48 .net
Q. poor man's dependency injection はDIと同じものですか?
A. 名前が違うのだから別物です

246 :仕様書無しさん:2018/05/27(日) 13:32:44.18 .net
>>245
DIの実装パターンの1つです
Poor man's dependency injection is a DI.

247 :仕様書無しさん:2018/05/27(日) 13:34:31.52 .net
>>246
あのー、Poor man's dependency injectionを調べたら
DIコンテナを使わないDIって書いてあったんですが、
それじゃPoor manじゃないものはDIコンテナを使うってことでいいんですよね?

248 :仕様書無しさん:2018/05/27(日) 13:35:58.87 .net
DIがDIコンテナを使うものという前提があるからこそ
DIコンテナがないことを示すために、Poor man's って
わざわざつけるんだろうに。自滅して大変だなw

249 :仕様書無しさん:2018/05/27(日) 13:37:32.20 .net
なにそのpoormanって、いつからアベンジャーズの話になったの?

250 :仕様書無しさん:2018/05/27(日) 13:38:42.06 .net
>>249
あの馬鹿も必死なんですよw
自分の説を認めてもらおうと
頑張って調べて・・・んで返り討ちにあってるわけですねw

251 :仕様書無しさん:2018/05/27(日) 13:50:31.95 .net
でもプアマンDIってものがあるなら
やはりDIという概念はもう少し抽象度が高く
DIコンテナ必須のパターンということではなくなるのでは?

252 :仕様書無しさん:2018/05/27(日) 13:52:53.93 .net
https://eow.alc.co.jp/search?q=poor+man%27s

> poor man's asparagus
> 貧乏人のアスパラガス◆アスパラガスと同じように利用できる上、入手しやすいリーキに対しヨーロッパで付けられたあだ名
Q. poor man's asparagusはアスパラガスですか?
A. いいえ、アスパラガスではありません。リーキのことです

> poor man's meat
> ナス◆【同】aubergine
Q. poor man's meatは肉ですか?
A. いいえ、肉ではありません。ナスのことです

> poor man's nuclear weapon
> 貧者の核兵器◆コレラや炭疽菌などの感染性細菌を利用した生物兵器は核兵器よりも製造費がかなり低くて済むことからこのように呼ばれる
Q. poor man's nuclear weaponは核兵器ですか?
A. いいえ、核兵器ではありません。生物兵器のことです

> poor man's Porsche
> プア(マンズ)ポルシェ、貧乏人のポルシェ、安価なスポーツカー◆高価なポルシェを買えない人が代わりに買うようなスポーツカー。
Q. poor man's Porscheはポルシェですか?
A. いいえ、ポルシェではありません。安価なスポーツカーのことです

253 :仕様書無しさん:2018/05/27(日) 13:54:01.14 .net
>>251
Q. poor man's DIはDIですか?
A. いいえ、DIではありません。

254 :仕様書無しさん:2018/05/27(日) 14:03:20.94 .net
poor man's DIがDIの代替品で、その特徴がDIコンテナを使わないことなら、
普通のDIはDIコンテナ使うってのが共通認識なんだよな。
でなければ、DIコンテナがないものに対して名前をつけたりしない

255 :仕様書無しさん:2018/05/27(日) 14:47:13.76 .net
>>247
よくないよ
キミさ論理破綻しすぎ

256 :仕様書無しさん:2018/05/27(日) 14:50:03.75 .net
>>252
あほくさ
DIとアスパラガスになんの関係があるのか説明してみな?

257 :仕様書無しさん:2018/05/27(日) 15:03:58.86 .net
>>256
poor man's asparagus

poor man's DI
には、両方とも poor man's が含まれてる

258 :仕様書無しさん:2018/05/27(日) 15:05:32.27 .net
>>257
で?

259 :仕様書無しさん:2018/05/27(日) 15:11:47.80 .net
>>258
poor man's asparagus は asparagus かどうか?

260 :仕様書無しさん:2018/05/27(日) 15:13:06.85 .net
>>259
asparagus じゃないよ。で?

261 :仕様書無しさん:2018/05/27(日) 15:18:05.58 .net
あぁ、そういうことか。DIじゃないね

262 :仕様書無しさん:2018/05/27(日) 15:25:13.80 .net
くだらない言葉遊びをしてるんじゃないよ
poor man's pasta はまさに pasta だ
poor man's DI は pasta のほうと同じパターンな
poor man's DI はまさに DI なんだよ

263 :仕様書無しさん:2018/05/27(日) 15:36:51.69 .net
あぁ、そういうことか。DIだね

264 :仕様書無しさん:2018/05/27(日) 16:18:14.88 .net
>>262
> poor man's DI は pasta のほうと同じパターンな

証明してないので認められない

265 :仕様書無しさん:2018/05/27(日) 16:21:16.10 .net
結局「DIコンテナを使わないDI」って言葉が伝わる地点で
マーチンがDIをどう定義しようがDIの言葉の意味とか抽象度とかってのは変わってしまうんだよな

リチャードストールマンがLinuxのことをGNU/Linuxって言いましょう!って主張してるのと一緒!!
けど、みんなLinuxって言うんだ。

266 :仕様書無しさん:2018/05/27(日) 16:39:11.71 .net
そうだね「DIコンテナを使わないDI」って言わない限り
DIコンテナ使うんだって思うのがデフォだね

267 :仕様書無しさん:2018/05/27(日) 18:10:30.32 .net
いやいや普通はDIっていったら依存性を注入することを想像するしコンテナまでは想像しないよ

268 :仕様書無しさん:2018/05/27(日) 18:11:22.08 .net
>>267
それはお前がDIを知らないからだよ

269 :仕様書無しさん:2018/05/27(日) 18:16:35.73 .net
>>267の考え方が一般的

270 :仕様書無しさん:2018/05/27(日) 18:19:21.82 .net
じゃあ一般的という証拠を出してください

271 :仕様書無しさん:2018/05/27(日) 18:21:47.07 .net
数学的根拠を示すためにデータを集めてね
最低でも100件

272 :仕様書無しさん:2018/05/27(日) 18:23:12.84 .net
数学的根拠も示してないのに一般的とかどういう神経してるんだろうかw

273 :仕様書無しさん:2018/05/27(日) 18:24:33.98 .net
数学的根拠を示すためにデータを集めてね
最低でも100件 ( ー`дー´)キリッ

274 :仕様書無しさん:2018/05/27(日) 18:32:04.52 .net
>>267
わざわざ「DIコンテナを使って」とは言わないだけ
なぜならDIするときにはDIコンテナを使うのが一般的だから

275 :仕様書無しさん:2018/05/27(日) 18:33:42.26 .net
>>274
そうだよね。
さらに一般的なだけじゃなくて、
マーチンファウラーやMSが言ってることだし

276 :仕様書無しさん:2018/05/27(日) 18:33:57.32 .net
じゃあマーチンファウラーやMSが言ってるという証拠を出してください

277 :仕様書無しさん:2018/05/27(日) 18:35:09.73 .net
>>276
マイクロソフト
https://msdn.microsoft.com/ja-jp/library/ff921087.aspx

マーチンファウラー
https://www.martinfowler.com/articles/injection.html

278 :仕様書無しさん:2018/05/27(日) 18:35:54.77 .net
>>277
はい。OKです。こっちは重要な根拠を示せますね

279 :仕様書無しさん:2018/05/27(日) 18:40:19.41 .net
一方は証明できるのに、もう一方の人は証明できない
これも能力の差なのかな
アンチの方こそDIをよく理解している

280 :仕様書無しさん:2018/05/27(日) 18:57:13.40 .net
だってQiitaとか出したらバカにされたし
Wikipedia出したら、あんなの信じるの?とか言われたし

281 :仕様書無しさん:2018/05/27(日) 18:57:45.75 .net
目くそ鼻くそてきな

282 :仕様書無しさん:2018/05/27(日) 18:58:17.65 .net
有名な記事は全部アンチDIが言ってることと同じだし

283 :仕様書無しさん:2018/05/27(日) 19:28:12.58 .net
>>274
これ

284 :仕様書無しさん:2018/05/27(日) 19:31:23.18 .net
それはデフォルトのオプションというだけであって必須というわけではない

void Func(string p = "unko") {}

pは必須パラメータか?違う

DIコンテナも多くの人にとってはデフォルトではあるが必須ではない

285 :仕様書無しさん:2018/05/27(日) 19:33:20.68 .net
> それはデフォルトのオプションというだけであって必須というわけではない
その根拠は? 数学的根拠を示してね

286 :仕様書無しさん:2018/05/27(日) 19:36:02.72 .net
>>285
必須と明記された資料はマーティンのサイトにもMicrosoftのサイトにもないぞ
あるというなら必須であると明記されたソースだして
なければ必須ではないということ
つまりオプションということだ

287 :仕様書無しさん:2018/05/27(日) 19:36:28.98 .net
>>286
いや、必須じゃないという根拠を聞いてるんだが?

288 :仕様書無しさん:2018/05/27(日) 19:37:20.83 .net
>>286
必須だとかいてなければオプションであるという
数学的根拠は?

289 :仕様書無しさん:2018/05/27(日) 19:37:34.35 .net
>>287
>>286

290 :仕様書無しさん:2018/05/27(日) 19:39:00.33 .net
>>288
自明

291 :仕様書無しさん:2018/05/27(日) 19:40:50.21 .net
>>290
自明であることの数学的根拠は?w

292 :仕様書無しさん:2018/05/27(日) 19:41:29.55 .net
http://www.harakenzo.com/jpn/gaikoku_siryo/us/20170123.pdf
自明であると認定するためには、その根拠が理路整然と明確に
示されることが必要であることが改めて示された最近の CAFC 判例

293 :仕様書無しさん:2018/05/27(日) 19:42:42.10 .net
>>291
自明

294 :仕様書無しさん:2018/05/27(日) 19:44:14.37 .net
>>293
自明の要件を満たしてないことは自明

295 :仕様書無しさん:2018/05/27(日) 19:45:10.84 .net
こういうふうに、自明でないものを自明とか
嘘つくやつがいるせいで信用されないってわかってないのかね?

296 :仕様書無しさん:2018/05/27(日) 19:45:58.80 .net
>>293が馬鹿であることは自明なんだがねw

297 :仕様書無しさん:2018/05/27(日) 19:46:18.68 .net
>>296が馬鹿であることが自明であることの証明をせよ

298 :仕様書無しさん:2018/05/27(日) 19:46:37.57 .net
必須でないなら使用してもしなくてもよい
それはまさにオプションのことである
はい自明

299 :仕様書無しさん:2018/05/27(日) 19:47:09.74 .net
>>297
自明なので証明は不要
故に>>293は馬鹿

300 :仕様書無しさん:2018/05/27(日) 19:47:18.12 .net
マイクロソフト
https://msdn.microsoft.com/ja-jp/library/ff921087.aspx

マーチンファウラー
https://www.martinfowler.com/articles/injection.html

301 :仕様書無しさん:2018/05/27(日) 19:47:33.63 .net
 DIとは?・・・オブジェクト指向の依存関係を"ひとまとめに"定義する部分と、それを利用するために
        オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

302 :仕様書無しさん:2018/05/27(日) 19:47:51.34 .net
Service Locator と Dependency Injection ってなにが違うの?

https://msdn.microsoft.com/ja-jp/library/ff921087.aspx
https://i-msdn.sec.s-msft.com/dynimg/IC258669.png の図より

Service Locator には、サービスロケーターがあって、
Dependency Injection には、その代わりに
ビルダーっていうのがあるのはわかった。
そのビルダーっていうのがDIコンテナと
呼ばれているものであることもわかった

重要な違いは、
Service Locator は、サービスロケーター があって
Dependency Injection には、ビルダー(DIコンテナ)がある
ってことでいいの?

303 :仕様書無しさん:2018/05/27(日) 19:48:15.63 .net
https://msdn.microsoft.com/ja-jp/library/ff921152.aspx

> デメリット
> 依存関係の挿入パターンには、次のようなデメリットがあります。
>
> 管理するソリューション要素が増える。
> オブジェクトを初期化する前に、依存関係の挿入フレームワークがオブジェクトに必要な依存関係を解決できることを確認する必要がある。
> ソース コードの複雑さが増し、理解が困難になる。

304 :仕様書無しさん:2018/05/27(日) 19:48:31.36 .net
DIにはデメリットが有るわけだね

305 :仕様書無しさん:2018/05/27(日) 19:49:10.63 .net
> クラスAの中でBを利用してる場合、クラスAの中で直接Bをインスタンス化した時に
> 困るケースって、テストが出来る出来ないというよりは、Bを同じインターフェースを
> もったCに変えたいとか、そういう柔軟性の為ですよね?

DIを使う場合、あらかじめ「クラスAはクラスBを利用します」と
静的に定義するので、アプリ実行中に動的にCに変えることはできないのです。
(もちろんコードを修正してアプリを再起動したら変更できますが)

一方、動的にBを同じインターフェースをもったCに変えたいときに
使うのはストラテジーパターンです。

ストラテジーパターンは戦略(アルゴリズム)を変更したいという
要求があるので、同じインターフェースを持ったB、C、D、E・・・が
作られるのは当然ですが、DIでは動的に変更できないので
同じインターフェースを持ったCが作られることはあまりありません。

実質クラスAで使用するものはクラスB決め打ちです。
つまり柔軟性が必要ない場合にDIを使うことになるわけです。
必要ない柔軟性を持たせることはYAGNIです

> テストの話するならクラスAの中で直接インスタンス化する場合でも、
> 先にクラスBのテストを通すようにしておけば、クラスAの中で直接Bを使ってても
> Bは信頼出来るものになってるからクラスAのテストに影響しないですよね。

はい、そのとおりです。

306 :仕様書無しさん:2018/05/27(日) 19:49:26.61 .net
>>135
https://msdn.microsoft.com/ja-jp/library/ff921087.aspx

自分の言ってるDIは制御の反転のことであって、DIのことではなかったのですね。制御の反転の実装パターンがdiやサービスロケーターってやつなのですね。

307 :仕様書無しさん:2018/05/27(日) 19:51:20.04 .net
わかりやすいDIの説明だね

308 :仕様書無しさん:2018/05/28(月) 16:01:02.10 .net
DIとはDIパターンのことであり、DIパターンとはDIコンテナを使うものだったんですね。

今まで反発してごめんなさい。

309 :仕様書無しさん:2018/05/28(月) 16:09:11.62 .net
>>308
おい、またあの馬鹿を召喚する気かw

310 :仕様書無しさん:2018/05/28(月) 19:28:06.28 .net
スレタイにDI入れたの
ハッキリ言って失敗だったな

DIなんかOOの一部でしかないのに
グダグダグダグダどうでもいいことで議論続いてウンザリ

311 :仕様書無しさん:2018/05/28(月) 19:41:08.95 .net
OOのデザインパターンの中でも12を争うウンコがDI

312 :仕様書無しさん:2018/05/28(月) 19:43:34.39 .net
ほーら、またあのバカが現れた

313 :仕様書無しさん:2018/05/28(月) 20:25:04.72 .net
次スレ立てる時はスレタイから「とDI」を外そうぜ

314 :仕様書無しさん:2018/05/28(月) 22:02:15.94 .net
次が要るのか?

315 :仕様書無しさん:2018/05/28(月) 22:12:08.29 .net
忘れてなければ今度は「とDI」を外すぜ
忘れてなければなー

316 :仕様書無しさん:2018/05/28(月) 22:37:31.81 .net
歪な知識しか持たないIT社長が、素人に歪で浅い知識植え付けて、そこらのJava案件に送り込むんだよね。
DIとかまさにそんな感じ。

良く知らずに使わされている技術について考える良い機会になったと思うよ。

317 :仕様書無しさん:2018/05/29(火) 03:25:06.33 .net
DIがDIコンテナを使うパターンだってことはわかった。

でもDIアンチは、インジェクションすること自体がうんこって言ってたよね?

その理由がいまだにわからないんだけど

318 :仕様書無しさん:2018/05/29(火) 06:18:52.33 .net
>>317
依存関係を分離するという志は素晴らしいが、
実際には単に、クラス内のフィールドに
オブジェクトを外部から入れるか、内部で生成するかの違いでしかない

外部から入れるためにインターフェースを作ってDIコンテナの
依存関係の定義をいちいち書くほどのメリットがない

内部で普通にnewしていれば十分。他のクラスに
入れ替えることがないならインターフェースも不要
DI使わないほうがコードはシンプルになる
そのことはマイクロソフトも認めている

https://msdn.microsoft.com/ja-jp/library/ff921152.aspx
> デメリット
> 依存関係の挿入パターンには、次のようなデメリットがあります。
>
> 管理するソリューション要素が増える。
> オブジェクトを初期化する前に、依存関係の挿入フレームワークがオブジェクトに必要な依存関係を解決できることを確認する必要がある。
> ソース コードの複雑さが増し、理解が困難になる。

ソースコードを複雑にして理解を困難にしてまでやることではない
少ないコードでシンプルするのが一番

319 :仕様書無しさん:2018/05/29(火) 09:24:27.77 .net
会話がここまで噛み合わない理由は、
コードの読みやすさを重視する度合いが
内製やってる連中とウンコレベルのドカタとで
全然違うからではないだろうか?

320 :仕様書無しさん:2018/05/29(火) 09:28:07.90 .net
反論できないからだろw

321 :仕様書無しさん:2018/05/29(火) 09:50:10.27 .net
>>318
そのマイクソのページわかりやすいね。
で、君はデメリットだけピックアップしてきたわけだけど
その記事にはちゃんとメリットも示されてるじゃないか

322 :仕様書無しさん:2018/05/29(火) 10:20:03.39 .net
デメリットが大きすぎて、DIと同じメリットが得られる
別の手法を選ばざるをえない
コードを書き捨てるドカタは事情が違うかもしれないけど

323 :仕様書無しさん:2018/05/29(火) 11:45:59.90 .net
>>321
書いてあるのはメリットじゃなくて期待できる効果だなw

しかも一部は○○という効果がある。ではなく〇〇するという
おい、○○するとどいういうメリットがあるのかを書くべきだろって
そこで、○○するって書くのはどういうことなんだ?ってツッコミ入る書き方だな
以下一つ一つ答えよう

1. クラスのソース コードに加える変更を最小限に抑え、または変更をまったく加えないで、
依存関係の置換または更新を行えるように、クラスを依存関係から分離する。

別にクラス内部で生成しても、依存関係変えたきゃ一行newする行を変えれば終わり
全く変えないでやりたいなら設定ファイルに文字列書いてクラス内部でevalでもするか?
(なんのためにしたいのかわからんが)

なお、文章がおかしい。「分離する」はメリットではなく、分離することで
「依存関係の置換または更新ができるようになる」というのが正しい書き方だ。文章が逆になってるな。

2. 具体的実装がコンパイル時に不明であるクラスに依存するクラスを作成できるようにする。

コンパイル時に不明であるなら、クラス内部で文字列からevalすればいいだけ。
だがそもそも具体的実装がコンパイル時に不明であることは少ない

3. 依存関係を使用せず、クラスを単独でテストする。
またテストか(笑) クラス内部でnewしていたとしても、ちょっとの工夫で依存関係を使用しないでテストできる
が、そもそもクラスを単独でテストすることに意味があるのか?
モックを使ったテストはできるだけしないほうがいい。別のクラスを使ってテストしても本当のテストにはならない

4. 依存関係の有効期間の指定と管理を、クラスの役割から分離する。
だから、分離することでどういうメリットが有るのかを書くべき
クラスの役割から分離して、依存関係の有効期間の指定を管理できる。と書きたいのかもしれんが
そもそも依存関係の有効期限はクラスの役割の一つなので分離したら駄目

324 :仕様書無しさん:2018/05/29(火) 13:13:59.61 .net
メインからのインジェクションをしない場合、依存関係がソース全体に散らばってしまう。

依存関係の整理を行おうとしたら、プロジェクトの全てソースのnewを検索して、調べなきゃいけなくなるじゃん。

newは疎結合を破壊するとんでもない代物なので、扱いには注意が必要だ。

抽象度の高い実装ができない部下に「言語レベルで実装されたクラス以外のnewはメインから受け取るようにね!」って伝えておけば

部下が「あのー〇〇クラスで〇〇使いたいんで、コンストラクタの引数増やしたんですけど、メインのソースいじりますよ?」ってなって
そのときそれがベターな手法かメインプログラマが考えることができる。

また、部下にこっそりメインいじられたとしても、メインのソースを日々意識しないメインプログラマなんていないでしょ。すぐ気がついて
「あ!〇〇クラス使いたいならファクトリから生成してね!」とか助言言いやすいっていうか。

部下の手によってプロジェクトのソースが荒らされ、全てのクラスの依存関係がめちゃめちゃになって泥団子化することはよくあることだ。

メインからのインジェクションを覚えさせておけばクラスが無闇矢鱈に依存しまくる問題を解消できる...

とか、思ってるんですけどどう思われますか?

325 :仕様書無しさん:2018/05/29(火) 14:26:31.42 .net
> メインからのインジェクションをしない場合、依存関係がソース全体に散らばってしまう。

それのどこが悪いんだって話だな。
結局、依存関係はどこか一箇所にまとめなきゃいけない
理由は? → と、とにかく一箇所にまとめなきゃいけないんだ!

結局こうなってしまう。だから説得力がない

326 :仕様書無しさん:2018/05/29(火) 14:29:11.90 .net
>>324みればわかるけど、理由がないんだよ。
長々とした水増し文章見てもわかるだろ?
結局、あいつは馬鹿なんだ。程度のことしか言ってない
DIに明確なメリットが無いから、技術的な話ができないんだよ

327 :仕様書無しさん:2018/05/29(火) 14:35:27.51 .net
ここのオブジェクトが責任持ってnewする方が疎結合だろ
「main様、私めはどのようなインスタンスを生成したら良いですか?」って全てが一箇所にお伺い立てるのが
どこが疎結合なんだよ脳みそ沸いてんのか

328 :仕様書無しさん:2018/05/29(火) 16:41:18.35 .net
>>325
オブジェクト指向って想定される変更に柔軟に対応できるように
クラスを使って変更点を一箇所に抽出するプログラミングスタイルと言えるよね?

で、依存関係を一つに集約する方法が、DIであり、メインからのインジェクションだろう?

そんなもの必要ない!とか感情論的に言われたら
君は依存関係が一つにまとまることがメリットとなるプロジェクトに携わったことがないということになるのでは?

どんな優れたパターンもテクニックもライブラリもフレームワークも技術も
目的がハローワールドを作ることなのであれば、全て無価値だ。

少なくともおれは、小さなアプリケーションから始まって、そのアプリケーションが成長するとともに管理が複雑化し
その複雑さの解消のひとつとして、依存性をひとつにまとめることは大きな価値があったよ。

メインを見れば、どのようにプログラムが動いてるか、抽象度の高いとこから見渡すことができる。

それが、プロジェクトの全てのファイルを開いて一つずつメモしなければ依存関係がわからない状態なんて、クソ喰らえだね!

329 :仕様書無しさん:2018/05/29(火) 17:07:25.14 .net
>>328
依存関係なんて、自動で出せるでしょ

330 :仕様書無しさん:2018/05/29(火) 17:18:48.45 .net
>>329
依存関係を変更するときに修正するファイルが一つになることが重要だと思ってた

331 :仕様書無しさん:2018/05/29(火) 17:20:53.30 .net
>>328
何度も言ってるけど、なんで依存関係を分離したり
依存関係を知ることが目的になってるんだよ
なにか目的があってそうしてるんだろ?
その目的を言わないから説得力がないんだよ

332 :仕様書無しさん:2018/05/29(火) 17:23:36.06 .net
>>330
考えてみ。
クラスAが使ってるオブジェクトが何か?って思ったら
クラスAを見ればいいだけだろ?

クラスAを見てもインターフェースしかわからない
実際には何を使ってるんだ?っていちいち調べないといけないんだよ。

ついでにいうとIDE使っているときジャンプ機能が使えなくなる
普通にクラス内でnewしていれば、そこにクラスが書かれているから
IDEでジャンプできるが、インターフェースだとジャンプできない

333 :仕様書無しさん:2018/05/29(火) 17:32:51.06 .net
依存関係の定義を一箇所にするっていうのは
一般的なプログラミングのセオリーに反してるんだよ。

ファイルを分割するとき責務で分割する。機能分割してはいけない。
例えば、O/Rマッパーはテーブル(責務)ごとに分割する。
select機能、update機能、delete機能、ごとに分割したりはしない
こんなことをすると、テーブルの構造が変わったとき、
select機能、update機能、delete機能、の各ファイル3つの
ファイルを修正することになる

依存関係の定義っていうのは、まさに機能ごとの定義になってる
あるモジュールが依存するオブジェクトが変わった(例えば追加)されたとき、
依存関係の定義ファイルまで修正しなければいけなくなる

責務ではなくて機能で分割されている証拠

334 :仕様書無しさん:2018/05/29(火) 17:39:21.10 .net
簡単に言えば関数型言語でモナド使ってやるべき事を
OOPLでやろうとしてるんだねDIは

335 :仕様書無しさん:2018/05/29(火) 18:06:37.39 .net
>>334
どういう所をみてそう思うの?

336 :仕様書無しさん:2018/05/29(火) 19:50:23.42 .net
多分まだ出てないDIコンテナのメリットとしては、依存オブジェクトをそのラッパーに差し替えるようなことがあるんじゃないかな。
クラスAのラッパーAwrapperを動的に生成して、利用側はAを使ってるつもりだが実際はAwrapperが呼ばれるようにする。
各依存オブジェクトのメソッド呼び出しのログを取ったり独自の権限チェックをしたりという横断的な変更が手軽にできるわけだな。
Aを作る立場だと余りメリットに思えないが、全体を運用してると便利かも。

337 :仕様書無しさん:2018/05/29(火) 20:00:02.91 .net
>>336
Decoratorパターンのことかな?
○○したいという要求があれば、その要求を実現するように作ればいいんだよ
それはそういう要求が出た時点でやること

今必要とされてないのに、将来ラッパーに差し替えたくなるかもしれないじゃないですか!
というのは過剰な設計だよ

そして別にDIを使わなければ実現できないわけじゃない

それからもう一つ、DIっていうのはプログラム起動時に
依存関係の定義し、プログラムの実行中に動的に変えることはしない
なにが言いたいかというと、クラスAのラッパーを使いたいのであれば

A a = new A(); を
A a = new WrapperA();

こう書き換えるだけで十分って話だ

338 :仕様書無しさん:2018/05/29(火) 20:24:57.03 .net
頼むからQiitaに
「DIにはデメリットしかない」
とかってタイトルの記事書いて欲しい

339 :仕様書無しさん:2018/05/29(火) 20:36:30.53 .net
お前が書けよ

340 :336:2018/05/29(火) 21:05:32.08 .net
>>337
横断的にってとこがポイント。

こんな感じ。
DIコンテナ管理下のオブジェクトA,B,C...
があった時に、各メソッドに割り込むフィルタ実装FをDIコンテナに組み込んで設定する。
するとDIコンテナはAとFを元にAwrapperインスタンスを動的に生成してAインスタンスの代わりに使う。
同様にBとFを元にBwrapperインスタンスを生成、CとFを元にCwrapperインスタンスを生成...
(各wrapperのソースは人がコーディングせず動的にインスタンスが作られる)

管理下のオブジェクトの数がある程度多い場合には、全オブジェクトを改修するより効率的だろうね。

341 :仕様書無しさん:2018/05/29(火) 21:16:42.35 .net
> 各メソッドに割り込むフィルタ実装FをDIコンテナに組み込んで設定する。
DIで各メソッドに割り込むフィルタを作ることはできない
それはDIとは関係のない機能

言語仕様としてあるメソッドの前後に処理を付け加えることが
できるのであれば、それは別にDIを使わずともできる

342 :仕様書無しさん:2018/05/29(火) 23:48:24.84 .net
>>339
DIに価値を感じてるおれにはかけないことだ

343 :仕様書無しさん:2018/05/29(火) 23:49:00.41 .net
あ、ごめん
DIじゃなくてインジェクションねインジェクション
インジェクショーン!!

344 :336:2018/05/30(水) 00:17:55.28 .net
なるほどこういうことか。
DIコンテナ無しで楽にAOPできる環境があればその方が便利?
別概念ではあってもDIコンテナといえばAOPは付き物のようだが…

DIコンテナとAOP
ttps://gamp-ameblo-jp.cdn.ampproject.org/v/s/gamp.ameblo.jp/ouobpo/entry-10013926093.html?usqp=mq331AQCCAE%3D&amp_js_v=0.1#amp_tf=ソース%3A%20%251%24s

345 :仕様書無しさん:2018/05/30(水) 07:22:52.34 .net
>>344
AOPも「やりたいこと」ではないからね。
本当のやりたいことっていうのはロギングだったり
トランザクション制御だったりするわけ

DIもAOPもそれがあるだけじゃ
ロギングもトランザクションも実現できない

かといってそれをDIやAOPの利用者が実装するとなると大変
そこでDIやAOPをベースとしたフレームワークが登場する
それがSpring FrameworkやASP.NET Core
フレームワークの開発者にとってはDIやAOPは便利な道具

だけど別にDIやAOPを使わなければフレームワークが作れないわけじゃないし
ロギングやトランザクション制御ができないわけでもない
だってフレームワークはDIやAOP登場以前からあったわけだし

だけどDIがあるおかげで間接的にメリットがある・・・と思うだろ?
そうじゃない。フレームワーク開発者がロギングやトランザクション制御に
DIを使うということは、それらをカスタマイズしようと思ったら
利用者に対して、DIのやり方でやってくださいと強制してしまう
(頑張れば完全に隠蔽も可能だろうけど、そういうフレームワークは聞いたことないな)

それに対してDIを使わないフレームワークでは簡単な設定で
ロギングやトランザクション制御を変更することができる。
なぜなら複雑な仕組みになるがゆえに、フレームワーク利用者に簡単に
使ってもらうために、フレームワーク開発者が内部にうまく隠蔽しようと頑張るから

その結果、DIを使うフレームワークは、フレームワーク開発者にとては開発が楽になるのだろうが、
フレームワークの利用者にとっては面倒なDIの設定が増え、ソースコードの複雑さが増し
理解が困難になってしまう。

346 :仕様書無しさん:2018/05/30(水) 08:08:48.60 .net
なかなか面白い流れになってきたな

347 :仕様書無しさん:2018/05/30(水) 10:19:10.43 .net
このスレはウザいけど勉強になる良スレ
AOPってなんだよ
検索したら変なアイドル出てきたぞ!

348 :仕様書無しさん:2018/05/30(水) 16:46:01.54 .net
なつかしいな10年くらい前に流行ったアスペクト指向だろ
横断的関心事をコードから分離するうんぬんのやつ

349 :仕様書無しさん:2018/05/30(水) 16:59:45.40 .net
20年ぐらい前だと思うぞ。AspectJとかあったよな
当時から理屈はわかるがロギングぐらいしか
応用例が見つからず、今はトランザクションとか見つかってはいるが。

正直ログもトランザクションも横断的関心事ではあるんだが
単に関数呼び出しの前後に入れるだけで使いやすくなるのか?って思っていたな

ログの場合、すべての関数の前後で出したら多すぎて邪魔だし
関数の処理の途中で出したいときもあるし、
トランザクションも途中でコミットしたいときとか例外あるだろと

汎用的な仕組みがあるだけならそれでいいだろうけど、
ユースケースに応じた使いやすい仕組みを求めるなら
コールバックとかで作り込んだほうがいいだろうな

350 :仕様書無しさん:2018/05/30(水) 17:14:16.00 .net
つまり、アスペルガーってのは
関数の前後にhookできる機能って解釈でおけ?

便利だなーふつうにその機能欲しい

351 :仕様書無しさん:2018/05/30(水) 17:15:17.73 .net
あ、すまんアスペルガーはここの粘着だった

352 :仕様書無しさん:2018/05/30(水) 17:19:40.18 .net
アスペクトな
これ大抵の言語ではDIなんか使わずに実現できるんだけどね

353 :仕様書無しさん:2018/05/30(水) 17:25:27.10 .net
オブジェクト指向だって、クラス構造が言語仕様に無くても書けるだろ。実装方法が云々とかアホか。
…って、DI自体がクラスの持たせ方を実装から論じてるだけだけどな。

354 :仕様書無しさん:2018/05/30(水) 17:25:27.61 .net
というかDIを使わないとAOPができないっていうことは、
DIが使われない場面ではAOPできないということ

その問題を解決するために、どこでもAOPができるようにすると
DIはAOPを提供する意味はなくなる。

はずなんだが、DIなしのAOPが普及してないのは
AOPを使う機会は少ないってことなんだよね
便利だけど複雑なコードでしか実現できない言語(Java)はかわいそう

355 :仕様書無しさん:2018/05/30(水) 17:27:46.26 .net
結局実装ありきの技法だから、デザインパターンとかオブジェクト指向論から外れた重箱の隅の話になってるんだしな。

356 :仕様書無しさん:2018/05/30(水) 17:39:00.28 .net
他のデザインパターンが明確な問題があって
それを解決するためのものであるのにたいして、
DIは依存関係がコードから分離していたほうがいいだろ?
という程度で、問題がないのに、こうすべきという方針だけで
作られたものだから駄目なんだよ

解決すべき問題がないから、問題を解決することができない
それでいてコードは複雑になる

それに分離と言ったって、結局インターフェースは分離できておらず、
またインターフェースだけでは動かないので、そのオブジェクトが
正しく動くと証明するには何かしらの実装が必要になる

つまり結合した状態でないと使えないものを分離したって
意味がないんだよ。分離したままじゃ使えないものなんだから
それが問題なく動くかなんてわからないだろ?

357 :仕様書無しさん:2018/05/30(水) 17:44:53.03 .net
結局、else不要論とかと同じ実装上の話だから、設計側の人間にはあんまり興味を持たれないんだよな。
ここで騒ぐほどに底辺コーダーの自己紹介になるんだし。

358 :仕様書無しさん:2018/05/30(水) 17:54:38.98 .net
>>356
インジェクションしたら少なくとも直接書くより柔軟性生まれるじゃん?

359 :仕様書無しさん:2018/05/30(水) 18:56:20.01 .net
REST APIって大きな意味でオブジェクト指向な気がするけどどうなんでしょ

360 :仕様書無しさん:2018/05/30(水) 19:23:34.11 .net
>>358
ソースコードを複雑にしないでできるなら構わないけど、
今必要となってない柔軟性のために、
DI使うのが無意味でデメリットしかないって話をしてる

361 :仕様書無しさん:2018/05/30(水) 19:25:07.89 .net
>>357
それとは違う。else不要とは違って
DIは使うだけでデメリットが発生する。
そして問題が発生する前から使うものだから
多くの場合デメリットしか存在しない

362 :仕様書無しさん:2018/05/30(水) 19:30:41.64 .net
>>360
「いま必要となってない柔軟性」とかいってる地点でオブジェクト指向を履き違えてる。

オブジェクト指向は、将来起こりうる変更に対して柔軟に対応するために、クラスに抽出するプログラミングスタイル。

それに俺がいってるのはDIじゃなくてメインからのインジェクションの話だから!

君がはじめに言ったんだろ?DIコンテナを使わないDIはDIと呼べないってさ。

363 :仕様書無しさん:2018/05/30(水) 19:38:21.98 .net
>>362
> オブジェクト指向は、将来起こりうる変更に対して柔軟に対応するために、クラスに抽出するプログラミングスタイル。

どこの誰がそんなこと言ってるんだ?

364 :仕様書無しさん:2018/05/30(水) 19:39:32.55 .net
> それに俺がいってるのはDIじゃなくてメインからのインジェクションの話だから!
ほらね。ソースコードが複雑になってしまった
DIコンテナを使うのは、そのやり方だと複雑になりすぎるから
少しでもそれを抑えようとするからなんだよ

365 :仕様書無しさん:2018/05/30(水) 19:53:52.39 .net
>>363
じゃあ君はオブジェクト指向をなんだと思ってるんだい?

366 :仕様書無しさん:2018/05/30(水) 21:23:09.64 .net
>>365
なんで俺が思っていることを聞くのかな?
世間一般で言われてる定義じゃだめなの?

367 :仕様書無しさん:2018/05/30(水) 21:24:16.78 .net
>>366
答えられないのワロスwwww

368 :仕様書無しさん:2018/05/30(水) 21:26:29.86 .net
>>367
いや、質問しているんだが?
世間一般で言われている定義ではだめなの?

例えばこれ
https://techacademy.jp/magazine/16275

369 :仕様書無しさん:2018/05/30(水) 21:27:35.46 .net
世間一般の定義でいいよ

370 :仕様書無しさん:2018/05/30(水) 21:28:56.70 .net
>>368
そこにクラスに抽出してるじゃん

クラスに抽出するってことは、将来起こりうる変更に対して柔軟に対応するのと同じ意味、
そこには、将来起こりうる変更に対して柔軟に対応するためとは書かれてないが、
書かれて無くてもいい。だって俺がそう言ってるんだから

371 :仕様書無しさん:2018/05/30(水) 21:29:15.45 .net
> クラスに抽出するってことは、将来起こりうる変更に対して柔軟に対応するのと同じ意味

んなわけないw

372 :仕様書無しさん:2018/05/30(水) 21:30:27.45 .net
どこの誰がそんなこと言ってるんだ?

だって俺がそう言ってるんだから


なんだこの茶番

373 :仕様書無しさん:2018/05/30(水) 21:32:49.56 .net
つーか、オブジェクト指向の時点で
"将来起こりうる変更に対して柔軟に対応"してるんだから
そこにDIを持ち出す必要ない

DIを使わずとも
"将来起こりうる変更に対して柔軟に対応"してるんだから
DIは不要

374 :仕様書無しさん:2018/05/30(水) 22:05:05.63 .net
>>372
370は俺じゃない

375 :仕様書無しさん:2018/05/30(水) 22:27:30.16 .net
いやいや、オブジェクト指向はクラスモジュールの再利用は積極的だけど、
別に同じフレームワーク使えなんて一言も言ってないよな?
システム違うならメインから作り変えるんだから、DIはs無駄なんだよ。

376 :仕様書無しさん:2018/06/01(金) 15:11:42.28 .net
DI不要派はどんな物を作るケースを想定してるの?
HelloWordやfibなら、DI不要には賛成だけど

377 :仕様書無しさん:2018/06/02(土) 11:25:59.30 .net
マイクロサービスで作ってるけど?

DI推奨派は各々のマイクロサービスが各自で生成するインスタンスを決めるんじゃなくて
どこか一箇所にまとめておくべきって言ってるんだよね?アホすぎw

378 :仕様書無しさん:2018/06/02(土) 12:11:45.90 .net
こいつマイクロサービスやったことなさそう

379 :仕様書無しさん:2018/06/02(土) 12:27:31.88 .net
>>377
お前はDIを否定するな。関係ない話だ。

DIの使えなさは、マイクロサービスとは関係ない

380 :仕様書無しさん:2018/06/02(土) 12:29:09.06 .net
ドカタしかいない場所でマイクロサービスとか言い出したら
嫉妬で狂いそうな子が沢山出ちゃうから止めよう

381 :仕様書無しさん:2018/06/02(土) 12:55:59.26 .net
>>376
どんな規模でも他プロジェクトのメインを使い回すなんて新規プロジェクトは無いだろ。

382 :仕様書無しさん:2018/06/02(土) 14:28:41.55 .net
>>381
今話をしてるのはmainの中のコードではなく、
(mainで書いていることにしている)
オブジェクトの依存関係の定義の話やで?

まあ「DIを採用したプロジェクト」では一般的に
mainで依存関係を定義したりしないがな。
そのDIフレームワークのやり方で定義するので

それでだ、プロジェクトの依存関係全体が全く同じになることはないが
局所的に見た場合、あるオブジェクトに対する依存関係は
だいたい同じになるわけで、オブジェクトが
使いまわしできるならば依存関係も同じになるはずだ

383 :仕様書無しさん:2018/06/02(土) 15:01:37.12 .net
>>382
DIじゃなければそもそも依存関係をいちいち記述し直す必要もない箇所の話?
それこそDIのメリットって何?

384 :仕様書無しさん:2018/06/02(土) 18:29:55.55 .net
>>381
「メインを使いまわす」の意味が分からない
具体的にどういうこと?

385 :仕様書無しさん:2018/06/03(日) 19:23:16.35 .net
DI使わん派ってどうやって分業してんの?
リポジトリの実装タスクが終わるまでドメインサービスの実装タスクはストップ?

386 :仕様書無しさん:2018/06/03(日) 19:33:43.23 .net
>>385
へ? DI使っていても、ダミーのオブジェクト作って作るんだろう?
同じやり方でいいじゃん

387 :仕様書無しさん:2018/06/03(日) 19:44:57.83 .net
え?
じゃあ本実装が出来上がったらダミーは用済みなの?

388 :仕様書無しさん:2018/06/03(日) 19:49:44.31 .net
>>387
残したければ残せば?

でもダミーオブジェクトを使ったらテストに通りますが
本実装を使ったらテストには通りません
ってことがないなら、消しても問題ないでしょ?

389 :仕様書無しさん:2018/06/03(日) 19:52:55.19 .net
え?
開発用サーバーが障害でたら本実装コードをダミー実装に書き換えて作業するの?

390 :仕様書無しさん:2018/06/03(日) 19:54:52.95 .net
>>389
そこまで馬鹿だとはw
テスト用サーバーで作業するに決まってるだろw

391 :仕様書無しさん:2018/06/03(日) 19:56:41.92 .net
テスト用サーバーと書いてしまったが、
開発用サーバーやステージングサーバーもありだな。
ようは本番用サーバーでやらなければいい

392 :仕様書無しさん:2018/06/03(日) 19:59:40.51 .net
>>390
え?
テスト用サーバーやステージングサーバーに迷惑かけるの?
ネットワーク死んだらどうするの?
遊びじゃないんだよ?

393 :仕様書無しさん:2018/06/03(日) 20:02:15.91 .net
ローカルにテスト用サーバーやステージングサーバー立てればいいだけだろ?
てか普段どうやって開発してるんだよw

まさか、みんなでサーバーを共有してんのか?
迷惑かけたらどうするんだよw
ネットワーク死んだらどうするの?w

394 :仕様書無しさん:2018/06/03(日) 20:03:11.73 .net
テスト・ステージング用サーバに繋いでデータを書き換える迷惑な人が後を絶たないから開発者を重要なサーバーから隔離するのが現代のシステム開発の定石になってる

395 :仕様書無しさん:2018/06/03(日) 20:04:22.32 .net
その定石だと、なにをやっても迷惑はかからない
だからDIとは関係ない話だな

396 :仕様書無しさん:2018/06/03(日) 20:04:40.78 .net
>>393
え?
そんなリソースの余裕あるとは限らないよ?
DI使えばサーバーもネットワークもリソースも気にしなくていいのになあ

397 :仕様書無しさん:2018/06/03(日) 20:05:14.27 .net
>>395
開発サーバー死んだらどうするの?

398 :仕様書無しさん:2018/06/03(日) 20:06:00.47 .net
>>396
それとDIになんの関係が?

399 :仕様書無しさん:2018/06/03(日) 20:08:01.77 .net
>>397
サーバー立て直せば?
っていうか、開発サーバー使わずに作っても
動くことは保証できないよ。

なぜかって?いやアホかお前
例えば開発サーバーのバージョンが変わったとき
同じように動くと思ってんの?

そう思うなら、サーバーのバージョン
気軽に上げてみやがれってんだ

実機と同じものを使わないと動くことなんて保証できないんだが

400 :仕様書無しさん:2018/06/03(日) 20:11:40.92 .net
ローカルサーバーを使うとなるとそこそこスペック必要だよな
派遣にはIDEとエクセルが動く最低限のスペックしか貸し出さないからローカルサーバーなんて動かせんよ

401 :仕様書無しさん:2018/06/03(日) 20:12:20.22 .net
>>398
DIしていれば簡単に実装を切り替えて作業ができる

402 :仕様書無しさん:2018/06/03(日) 20:13:00.99 .net
>>400
真の問題はマシンスペック不足ということですね。
はい、次

403 :仕様書無しさん:2018/06/03(日) 20:13:39.45 .net
>>401
DIしなくても簡単に実装を切り替えられるだろ

そういうのもわからないのは
本当に馬鹿なんだなぁって思う

404 :仕様書無しさん:2018/06/03(日) 20:14:57.41 .net
>>399
サーバー直すまで待ってるの?

結合テストは他にやるに決まってるでしょ?
まさか君の会社はユニットテストやったら結合テストやらんの?
それはちょっと非常識すぎないかね?

405 :仕様書無しさん:2018/06/03(日) 20:15:56.39 .net
>>403
はい嘘

406 :仕様書無しさん:2018/06/03(日) 20:16:18.32 .net
実装を簡単に切り替えられるが、
それはそれとして、本番で使わないものを使ってテストしても
本番で使うもので正しく動くとは限らないぞ

407 :仕様書無しさん:2018/06/03(日) 20:16:44.98 .net
>>402
次はネットワーク障害
本実装コードしかないと対応大変よ?

408 :仕様書無しさん:2018/06/03(日) 20:16:58.29 .net
>>404
> サーバー直すまで待ってるの?
サーバーなんて一瞬で作れるじゃん
Dockerとか知らないの?

409 :仕様書無しさん:2018/06/03(日) 20:17:43.21 .net
>>407
ローカルでサーバー建ててテストするんで関係ないなw

410 :仕様書無しさん:2018/06/03(日) 20:19:06.11 .net
>>406
もちろんいずれ本実装で結合したものを使ってテストを行う
でもそれまでは別に本実装で結合したまま開発する必要は全くない
本実装で結合したままだとインフラの影響を受けるから開発の邪魔になる

411 :仕様書無しさん:2018/06/03(日) 20:20:14.17 .net
>>410
はい、だからDI使わなくても、
それを使えばいいだけの話ですね

412 :仕様書無しさん:2018/06/03(日) 20:21:09.96 .net
>>408
どの現場でもDockerをインストールできると思ってるの?
開発者がDockerインストールして自由にコンテナ動かせるなんてセキュリティ意識の低いWeb系かよほど強い政治力もった開発者じゃないとね

413 :仕様書無しさん:2018/06/03(日) 20:21:49.50 .net
>>412
本当の問題がわかってきたかい?
お前の環境が悪いんだよ

414 :仕様書無しさん:2018/06/03(日) 20:22:34.42 .net
>>409
取引企業「セキュリティ上の都合で許可しませーんwww」

415 :仕様書無しさん:2018/06/03(日) 20:23:59.73 .net
>>414
技術の問題と、お前の会社の問題を
区別してくれない?

そのうち、お前
「パソコンはウイルスに感染するから許可しませーんwww」
とか言いそうだから

416 :仕様書無しさん:2018/06/03(日) 20:24:21.89 .net
>>411
DIを使わないと切り替えがめんどう

417 :仕様書無しさん:2018/06/03(日) 20:25:09.10 .net
>>416
? DIを使って切り替えするのって、クラス名を変更するだろ?
DI使わなくても、クラス名を変更するだけだろ?
どちらも同じなんだが

418 :仕様書無しさん:2018/06/03(日) 20:25:42.01 .net
>>413
そう
環境は自由にならない
なので設計で対処する
そのためのDI
DI要らんとか言ってる子はいままで運が良かっただけ

419 :仕様書無しさん:2018/06/03(日) 20:26:59.65 .net
>>416
話をすり替えるな。

DIを使わなくても同じことはできると言ってる
DIを使ってコードを複雑にして理解を困難にしてまで
やることじゃない

420 :仕様書無しさん:2018/06/03(日) 20:28:28.39 .net
>>419>>418あて

421 :仕様書無しさん:2018/06/03(日) 20:28:37.02 .net
>>415
技術とビジネスは表裏一体
ビジネスの都合が何も無いと考えるのは子供だけ
ホビーの世界なら何の制約もなく(金という制約があるが)環境を選べるだろう
しかしビジネスの世界はそうではないのだ

422 :仕様書無しさん:2018/06/03(日) 20:30:05.75 .net
>>421
ならDIを使わないほうがいいな。
DIを使うとメモリを食うんだ

423 :仕様書無しさん:2018/06/03(日) 20:31:22.21 .net
>>417
変えんよ?
ありがちなパターンだと環境変数とか設定ファイルをちょっと変えるだけ
それで開発用のDIとテスト用のDI、ステージング用のDI、本番用のDIが切り替わる

424 :仕様書無しさん:2018/06/03(日) 20:31:44.48 .net
データベースサーバー作る代わりに
データベースサーバーのモックを作るほうが
コストかかるだろw

425 :仕様書無しさん:2018/06/03(日) 20:32:31.47 .net
>>419
いやいや
DIを使わないとめんどくさくなるよ
君は使ったことないからわからないんでしょ?

426 :仕様書無しさん:2018/06/03(日) 20:34:36.94 .net
>>423
> 変えんよ?
> ありがちなパターンだと環境変数とか設定ファイルをちょっと変えるだけ

変えんよ→変えるだけ

笑うところかな?w

> それで開発用のDIとテスト用のDI、ステージング用のDI、本番用のDIが切り替わる

private hoge = is本番 ? new Hoge() : new HogeTest()

これだけの話をしていたわけねw

427 :仕様書無しさん:2018/06/03(日) 20:37:44.68 .net
>>422
サービス起動する方がメモリ食う

>>424
そうでもない
例えばリポジトリをサーバー用の実装からローカルSQLite用の実装に変えるのは比較的容易(設計がマトモなら)

428 :仕様書無しさん:2018/06/03(日) 20:40:19.22 .net
> 例えばリポジトリをサーバー用の実装からローカルSQLite用の実装に変えるのは比較的容易(設計がマトモなら)

SQLの文法違うんですが?

429 :仕様書無しさん:2018/06/03(日) 20:44:35.13 .net
>>426
君「クラス名変わるだろ」
僕「変わらんよ」
僕「クラス名じゃなく設定が変わるだけ」
君「クラス名変わっとるやん。笑うとこかな」どやーん

笑っちゃったごめん

>>428
今時のFWはSQL書かんし
どうしてもマニュアルで書きたい時もビルダーパターン挟むんで文法の差異は吸収されるんすわ


なんか連投規制うっといからそろそろ消えるわ
DIの炎上学習法、頑張ってや!バイバイ!

430 :仕様書無しさん:2018/06/03(日) 20:45:46.33 .net
>>429
・・・あぁ、設定を変えることで
使用するクラス名を変えてるってことに、
自分で気づいてないのか。
ちょっと可愛そうになった

431 :仕様書無しさん:2018/06/03(日) 20:47:32.38 .net
> なんか連投規制うっといからそろそろ消えるわ
それはお前が連投しているだけだろw
必死すぎの証

432 :仕様書無しさん:2018/06/03(日) 21:05:13.76 .net
結局またDIのメリットも言えずにトンズラか
いつものパターンだな

433 :仕様書無しさん:2018/06/04(月) 08:54:35.06 .net
>432
プログラマなら自分で考えろよそんくらい…

DIなんてただの道具やテクニックなんだから、適用できるケース、使いこなすための知識や技術、効果の得られる規模、そういった物がプロダクトとチームにマッチして初めて使えるわけじゃん。
自分達に必要無いならそれはそれでOK。

ただ、お前よりよっぽど頭の良いセンセイ達が、何かしらの問題を解決するために作り上げて、世界でそれなりに使われてる存在なんだから、もうちょっと謙虚に学んでみれば?

434 :仕様書無しさん:2018/06/04(月) 09:19:12.13 .net
不要だから学ぶ必要も無い。

435 :仕様書無しさん:2018/06/04(月) 09:44:58.67 .net
つか、スタブや別クラス使ってテストするのは単体テストまでだろ?
以降は物理的もしくは論理的に隔離された完全同一環境でテストするだろ。

436 :仕様書無しさん:2018/06/04(月) 10:21:26.15 .net
>>433
お前まだ理解してないのか?

DIを使うとコードが複雑化する上に、DIで解決できるとされるものは
DIを使わなくても解決できるんって話なんだが

437 :仕様書無しさん:2018/06/04(月) 10:23:27.45 .net
それが理想だけどそうもいかない部分もあるよ
システム外に影響でちゃう所とか

他所のサービスAPIでテスト契約が限られてたり
メールやSMSが変なところに飛ばないようにしたり
帳票にサンプルマーク出るようにしたり

438 :仕様書無しさん:2018/06/04(月) 10:44:40.32 .net
>>436
>DIを使うとコードが複雑化する
これはわからん
もしかしてフレームワークやライブラリのコードを足してる?

>DIを使わなくても解決できる
まあわかる
江戸時代の人は新幹線使わずに京都へ行ったし
原始の人はスマホ無くても生きてけた

439 :仕様書無しさん:2018/06/04(月) 10:49:38.15 .net
>>438
>>DIを使わなくても解決できる
>まあわかる
>江戸時代の人は新幹線使わずに京都へ行ったし
>原始の人はスマホ無くても生きてけた

どう考えても、DIが出てきて以降の技術(Dockerとかね)に
ついてこれずに古臭いやり方に固執してるのがDI派なんだが...w

440 :仕様書無しさん:2018/06/04(月) 10:57:55.90 .net
DockerがDIを置き換えるってこと?
そこは勉強不足だったわ

441 :仕様書無しさん:2018/06/04(月) 11:21:52.15 .net
>>438
> >DIを使うとコードが複雑化する
> これはわからん

マイクロソフトがそう言っている

https://msdn.microsoft.com/ja-jp/library/ff921152.aspx

> デメリット
> 依存関係の挿入パターンには、次のようなデメリットがあります。
>
> 管理するソリューション要素が増える。
> オブジェクトを初期化する前に、依存関係の挿入フレームワークがオブジェクトに必要な依存関係を解決できることを確認する必要がある。
> ソース コードの複雑さが増し、理解が困難になる。

442 :仕様書無しさん:2018/06/04(月) 11:24:58.79 .net
>>440
DockerがDIを置き換えるわけじゃないぞ?
モックなどの偽物を使ってテストするということは
それで動いたとしても、それは偽物を使って正しく動くことを
証明しただけで、本物を使った場合に正しく動く証明にはならない
できる限り本物を使ってテストするのが良いということだ

特にデータベースなんかは、十分な品質の偽物を難しいので
素直に単体テストの段階から本物を使ったほうがいい
Railsなんかもそれが基本となっている

443 :仕様書無しさん:2018/06/04(月) 11:25:33.36 .net
あぁ、でDockerを使うのは、
その本物のデータベースサーバーなどを
すぐに用意できるって話ね

444 :仕様書無しさん:2018/06/04(月) 20:06:52.91 .net
Docker神だよなあ

445 :仕様書無しさん:2018/06/06(水) 11:45:24.29 .net
DIとDockerじゃ全く関心ごとが違う。同時に使用できる

DIはアプリサービス層やドメイン層からインフラ層を分離して疎結合にする仕組み
ちゃんと契約プログラミングしてれば、アプリサービス層やドメイン層のテストには本物のDB使う必要なんか別にない

データベース使うインフラ層は本物のDB使ってテストしないといけない
テスト時だけ起動する使い捨てのDBはDocker使ったらいい

446 :仕様書無しさん:2018/06/06(水) 13:35:43.20 .net
> ちゃんと契約プログラミングしてれば、アプリサービス層やドメイン層のテストには本物のDB使う必要なんか別にない

それは偽物のDBが本物のDBと同じように動くことが担保できていることが条件
でないと、いくら偽物のDBを使って動くことを保証しても
本物のDBで動くことの保証にはならない

偽物のDBが本物と同じようになればいいと思うが、
そのために時間と偽物のDBのテストが必要になる

447 :仕様書無しさん:2018/06/06(水) 13:39:51.63 .net
ほぼ9割ぐらいはDIなんか使わないで普通のインターフェースで事足りないか

448 :仕様書無しさん:2018/06/06(水) 13:49:38.06 .net
そう、俺もDIなんていらないと思うんだけどね。
どうしてもDIパターンでなければだめだって思ってる人がいるようだ

挙句の果てに何でもかんでもインジェクションといって
これもDIなんだって嘘をつく

449 :仕様書無しさん:2018/06/06(水) 14:47:59.71 .net
DIが疎結合だって?あはは、ご冗談を。
テンプレートでも使ってどんなクラスでも取り込んじゃうならそう言ってもいいけどさ。

450 :仕様書無しさん:2018/06/06(水) 16:45:18.94 .net
このスレのDI否定厨は、ストラテジーパターンも意味ないと思ってる人たちなの?

451 :仕様書無しさん:2018/06/06(水) 16:49:02.29 .net
いらないのはDIパターンであってストラテジーではない

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

ストラテジーパターンを使うときは、そうしなければいけないという
目的が最初にあって使うものだが、DIはその目的がない

452 :仕様書無しさん:2018/06/06(水) 16:57:20.11 .net
DIなんていらない。
バージョンに合わせるほうが苦労する。
プログラマなら自分で作ったほうが速い。

453 :仕様書無しさん:2018/06/06(水) 18:12:37.13 .net
カス

454 :仕様書無しさん:2018/06/07(木) 17:59:16.65 .net
ほらよ
https://qiita.com/hirodragon/items/73442390d551fe7376ea

455 :仕様書無しさん:2018/06/07(木) 23:35:49.10 .net
ウンコレベルの浅さでワロタ

456 :仕様書無しさん:2018/06/09(土) 20:11:33.47 .net
>>455
じゃあコメント付けてください

457 :仕様書無しさん:2018/06/10(日) 13:00:14.09 .net
なんか400ぐらいからDIと関係ない開発環境の話が出てきてるので。

・特殊なセキュリティの案件を主体の開発会社でなければ、ローカルVMは当たり前。vagrantでもdockerでもなんでもok。そもそもセキュリティ厳しかったらネットが隔離される
・i5第3世代以降+メモリ8GB有れば十分なスペックなのにそれすら満たせない開発PCしかない会社は、根本的に開発する気がない。人を雇うよりまずPCを買い直すべき
・VMツールのインストール禁止は聞いたことがない(申請制は良くある)。セキュリティ的に考えても、オンプレ開発サーバに接続するよりミニマムだから、適切に申請すれば必ず通る。

んで、これが出来ないからDIってのはだいぶ暴論だしそもそも飛躍しすぎかな。

458 :仕様書無しさん:2018/06/10(日) 16:59:45.80 .net
セロリン メモリ2G 14インチデスプレー ボール型マウス
IE8 派遣社員はネット接続不可 全てのフロア、トイレの前に監視カメラ
by 金融系案件請負系の某会社

459 :仕様書無しさん:2018/06/10(日) 22:22:01.26 .net
金が良くなかったらPC変えられないのがわかった時点で転職活動開始だな...

460 :仕様書無しさん:2018/06/10(日) 22:24:49.83 .net
事務員のお姉さんが使ってるPCのほうが性能高そう

461 :仕様書無しさん:2018/06/12(火) 19:17:39.69 .net
Docker知ってる人殆どいなかった弊社
転職したいけどコミュ障だから面接がこわい

462 :仕様書無しさん:2018/06/12(火) 19:31:29.25 .net
docker for windowsきどうしたらメモリが足りないって言われた
i5, 8Gは貴族階級の戯言だわ

463 :仕様書無しさん:2018/06/12(火) 22:13:54.26 .net
100万のPCとか何に使うんやろ

464 :仕様書無しさん:2018/06/12(火) 22:19:55.14 .net
>>462
適当に買っても6万ちょいなんですがそれは...

465 :仕様書無しさん:2018/06/13(水) 00:19:42.09 .net
class Foo {
private Bar b = new Bar();
public void aaa() => b.Method();
}

class Bar {
public void Method() {
if (ENV.IsDev) ...;
else ...;
}
}

使う側は何も考えずnewすりゃいい
実装を切り替えたければ使われる側が透過的に対応すればいいだけ
interfaceもDIも不要

466 :仕様書無しさん:2018/06/13(水) 02:36:05.36 .net
流石に通常のコードとdebug用コードが高頻度に混在してたら消せよバカって思いたくなるし、
根本的にモックと差し替えるのを素直に表現できん

467 :仕様書無しさん:2018/06/13(水) 09:44:30.92 .net
某メーカーの仕事した事あるけど、歴代の機種の差分が全部#ifdefで括られてたぞ。
実コード半分以下の超大作が何本も…。

468 :仕様書無しさん:2018/06/13(水) 14:46:29.20 .net
>>467
その話の結論は、機種ごとにファイルに分けろで終わるので
ぶっちゃけどうでもいい

469 :仕様書無しさん:2018/06/13(水) 15:02:47.66 .net
>>466
ここで書くことじゃないけど
デバッグコードとログコードの違いを知らないやつが多いんですわ
まあ、ログ機能をデバッグに使えてしまうし、
ログレベルにdebugとかあるから勘違いしやすいんですが

デバッグコードっていうのは開発時のデバッグに
一時的に入れて最終的には消すもの。だから最終的残ってるのはおかしい

ログっていうのは製品版でもそのまま使われるコードで機能の一つ
適当に入れるものじゃないし、これはコードと混在させるしかない
混在させると言っても、 log(ERROR, 'メッセージ'); みたいな感じで一行になってる
if(DEBUG_MODE) printf('メッセージ')みたいな条件文があったらおかしい

ちなみにDIを使えばログを入れられると思うかもしれないが、
インターフェースの関数呼び出しのログしか出力できない
コードの途中のログは出せないし、ログレベルごとに出力内容を
変えるときには使えない(複雑になりすぎる)
本質的にはログはモジュールの機能の一つなのでDIで入れるべきものではないんだ

かといってデバッグのために使えるかと言うと・・・
素直にデバッガの関数呼び出しのトレース機能を使ったほうが良いかな

470 :仕様書無しさん:2018/06/13(水) 17:54:33.97 .net
Logじゃなくてグローバルイベントにして
依存してないものをもたせちゃだめh

471 :仕様書無しさん:2018/06/13(水) 18:10:51.58 .net
そうするとグローバルイベントを発生させる
オブジェクトに依存するんだけどなw

Logger.log(ERROR, 'メッセージ');



Event.raise('log', ERROR, 'メッセージ');

になるだけというw

472 :仕様書無しさん:2018/06/13(水) 18:16:25.83 .net
JavaScriptだとconsole.logがどこからでも使えるように、
ログ出力機能っていうのは、言語の基本ライブラリ
(デフォルトでimportされるライブラリ)
として使えるべきなんだよな

そうなってないからDIでインジェクションとかするはめになる

473 :仕様書無しさん:2018/06/13(水) 19:20:16.77 .net
ログに関しては収集解析するサービスもセットだよね
なのでメインの開発者と実行時にできるだけ負荷かからないシンプルな構成でいい
となるとインジェクションは選択肢から消える

474 :仕様書無しさん:2018/06/13(水) 20:03:54.18 .net
>>468
そんな事したら似たようなソースファイルが沢山出来て管理出来なくなるじゃん。

475 :仕様書無しさん:2018/06/13(水) 20:40:40.11 .net
>>474
同じところがあるならまとめればいい
違う所だけ抜き出してファイルに分けろと

476 :仕様書無しさん:2018/06/17(日) 16:16:58.19 .net
国内のシステムはオブジェクト指向もDIもいらない
オブジェクト指向とDIは画面とエンティティとテーブルに綺麗な対応関係があるって前提からスタートしてるから現実の世界では役に立たない
非正規型のデータウェアハウスみたいなDB、あらゆるところからあらゆるデータにアクセスする複雑怪奇なな業務ルール、多数のエンティティをバラバラに引き裂いて混ぜ合わせたようなぐちゃぐちゃな画面要求
こういうシステムは人海戦術で複雑なSQLとhtmlを書きまくってダイレクトに結合させるほうがうまくいく

477 :仕様書無しさん:2018/06/17(日) 16:20:20.28 .net
それ、階層足りないだけで、きちんと集約されてないから複雑に見えるだけなんだけどな。
要するに分析が出来て無いだけ。設計が手抜きって事。

478 :仕様書無しさん:2018/06/17(日) 17:19:54.26 .net
>>477
〜設定してるときに〜見たいじゃんって要求が必ずしも綺麗に行くとは思えない
え?でもその可能性を考慮しちゃうと
すべてのデータがすべてのデータにアクセスできる必要があっちゃわない?
ってとこまで行く経験は俺はよくあるけどね

〜を触ってるときに〜を知る必要はない
って思い込みで設計をしたところから地獄が始まる
せめてその意図を同時に記述しておき
それが崩れたときはすべての隠蔽コードを破棄するべき

479 :仕様書無しさん:2018/06/17(日) 17:41:17.94 .net
>>478
バカ

480 :仕様書無しさん:2018/06/17(日) 18:01:09.78 .net
業務系のユーザーは欲張りだからね
要望を聞くと「1画面にあらゆるものをしこたま詰め込んでカオス化させること」が要件になってしまう
シンプルな画面を沢山つくるんじゃ「画面遷移が多くて生産性が上がらない」ってクレームがついて前述の要件を満たせなくなる

481 :仕様書無しさん:2018/06/17(日) 18:39:59.54 .net
まあ、別アプリ組み合わせてオペレーターに作業させればいいだけだったりするよな。

482 :仕様書無しさん:2018/06/17(日) 23:52:27.35 .net
>>480
そりゃそうでしょ
毎日同じ画面と向き合って入力するのに、何回も何回も画面遷移したい?

483 :仕様書無しさん:2018/06/18(月) 00:47:34.09 .net
>>482
俺がどう思うかは興味ない
客が巨大な神画面を要求するという事実が重要
神画面が要件に入るとオブジェクト指向もDIもまともに機能しなくなる
高尚な理論を説いても現実の世界では使い物にならない

484 :仕様書無しさん:2018/06/18(月) 02:20:07.14 .net
>>482
そこに関しちゃそうだな
どっちかというと、ユーザーの要望と要件は1/3ぐらい真の要件や最適解とは程遠いので、そこを整理せずに設計するとカオスになるんだと思うよ

485 :仕様書無しさん:2018/06/18(月) 07:14:41.26 .net
>>476
>オブジェクト指向とDIは画面とエンティティとテーブルに綺麗な対応関係があるって前提からスタートしてるから

どのオブジェクト指向がそんなことを前提にしてるって?
OOA/OODのことか?OOPとは別の話だろ。
DIは完全にOOP側の要素だし。

OOA/OODやDIを否定して勢い余ってOOPまで否定するのは感心せんな。

486 :仕様書無しさん:2018/06/18(月) 07:17:19.27 .net
>>483
お前に技術力がないだけでは?

もともと画面(View)はモデルとは分離して作る
コントローラー側で複数のモデルにたいしてデータを作成するだけ

お前が、画面をもとにモデルを設計してるからそうなるんだよ。
というか設計してない。単に画面をそのままコードに変換してるだけ

487 :仕様書無しさん:2018/06/18(月) 07:18:32.71 .net
>>485
そんな厳密に分ける必要のある話ちゃうやんw

488 :仕様書無しさん:2018/06/18(月) 07:19:38.61 .net
>>486
うーん、でもそれ机上の空論だよね?
って話してるわけ

489 :仕様書無しさん:2018/06/18(月) 08:19:35.10 .net
>>480
「机上の空論」っていうことに
根拠は無いよねって言ってる

490 :仕様書無しさん:2018/06/18(月) 08:19:50.30 .net
>>488へのレスの間違い

491 :仕様書無しさん:2018/06/18(月) 08:34:56.58 .net
>>488
そら設計できないお前にとってはありとあらゆる設計手法が机上の空論やろw

492 :仕様書無しさん:2018/06/18(月) 12:44:38.66 .net
>>486
じゃ、データがリアルタイムで更新されるとして
そこに表示されるコンボボックスの要素もリアルタイムで更新されるとしたとき
どんな設計するん?
モデルとビューは関係ないとかキチガイ発言繰り返すのん?

493 :仕様書無しさん:2018/06/18(月) 14:26:26.57 .net
>>492
なにその初歩的なお題
そんなところで躓いてる奴が「机上の空論」ってドヤってんのか

そうやって煽ってアドバイスをもらおうとするのやめた方がいいよ初心者さん

494 :仕様書無しさん:2018/06/18(月) 18:51:47.24 .net
>>493
でも解決方法はこんな簡単な問題でもビューとモデルを包括した仕様の変更しか無いよね?
この程度で限界が来ちゃう理論を大事に守ってるのってなんか意味あるの?

495 :仕様書無しさん:2018/06/18(月) 19:19:16.24 .net
>>492
MVVMという言葉で調べておいで。
本当に能力不足だったようだw

496 :仕様書無しさん:2018/06/18(月) 19:20:08.86 .net
>>494
この程度で、自分の限界が来ちゃってるのねw
お前、この業界にいる意味あるの?

497 :仕様書無しさん:2018/06/18(月) 20:18:43.80 .net
画面を区分けしてそれぞれにViewとModelを割り当てる
画面全体は各Viewを取りまとめたり、相互作用を仲介したりする

498 :仕様書無しさん:2018/06/18(月) 20:40:04.70 .net
>>496
え?このままじゃどうにもならないでしょ?
頭悪いの?
コンボボックスで選択してる間に選択項目消えちゃうって言ってるんだよ

499 :仕様書無しさん:2018/06/18(月) 23:09:20.84 .net
>>498
選択項目消えても問題ないように作れば?

500 :仕様書無しさん:2018/06/18(月) 23:28:53.37 .net
>>498
選んでる最中に消えるからどうにもならないって?
どうするか決めろのが設計だろアホw

501 :仕様書無しさん:2018/06/18(月) 23:40:21.48 .net
この分じゃ楽観的ロックも知らんのやろうな

こいつが問題にしているのは

コンボボックスの中身を更新するために全部消してリセットしたら
選択位置がリセットされちゃうんです。
え?全部消すんじゃなくて変わった部分のみを変更すればいいって?
そんなのどうやるんですか?そんなコード会社で見たことないです!

程度の話だろw

502 :仕様書無しさん:2018/06/19(火) 07:10:57.09 .net
>>501
全部消えちゃう可能性もあるよね?

503 :仕様書無しさん:2018/06/19(火) 07:12:08.27 .net
>>500
モデルとビューなんて切ってたってこの程度だぜ

504 :仕様書無しさん:2018/06/19(火) 07:12:40.61 .net
>>502
それがどうかしたの?

505 :仕様書無しさん:2018/06/19(火) 07:18:28.77 .net
全部消えちゃった時どうすればいいかわかんないんです。

506 :仕様書無しさん:2018/06/19(火) 07:24:41.31 .net
それは仕様を決めればいいだけだよね?

507 :仕様書無しさん:2018/06/19(火) 07:26:00.21 .net
仕様がないんです。会社のコード見てもよくわかんないんです。
どうしたら良いんでしょうか?誰か教えてください。

508 :仕様書無しさん:2018/06/19(火) 08:15:05.37 .net
>>506
ビューとモデルは分離していいことあった?

509 :仕様書無しさん:2018/06/19(火) 14:55:08.95 .net
>>508
当たり前。分離されてるからテストもしやすい

510 :仕様書無しさん:2018/06/19(火) 14:55:24.44 .net
あとCLIから実行するのも簡単

511 :仕様書無しさん:2018/06/19(火) 15:55:59.74 .net
でもUI的に使い辛いんだよな。

512 :仕様書無しさん:2018/06/19(火) 17:15:37.12 .net
ビューとモデルが分離されてると
使いやすいUIに変更するときも便利
良いことならたくさんあるよ

513 :仕様書無しさん:2018/06/19(火) 17:20:53.75 .net
嘘ばっかし。

514 :仕様書無しさん:2018/06/19(火) 17:27:03.62 .net
嘘だ!嘘に違いない!ばーかばーか!

515 :仕様書無しさん:2018/06/19(火) 17:43:58.81 .net
逆にビューとモデルを分離せずにいいことあったかどうかを聞きたいね
別にシンプルになるわけでもないし

516 :仕様書無しさん:2018/06/19(火) 17:52:42.07 .net
やたらめったら抽象化された7個のインターフェース、13個のクラス
オープンソースライブラリ使いまくりのゴミコンソールアプリを作ってるバカな同僚がいたから
同じことをする10行ぐらいのスクリプトを書いてやったら急に怒り出した
DI厨ヤバすぎ

517 :仕様書無しさん:2018/06/19(火) 19:21:45.90 .net
>>516
それDI関係ねーよwww

518 :仕様書無しさん:2018/06/19(火) 19:24:17.79 .net
>>517
めちゃあるよ
DIするとバカみたいにクラスやインターフェースが増えて大したことしてないのにメンテナンスコストが増える

519 :仕様書無しさん:2018/06/19(火) 19:47:24.49 .net
>>518
問題をDIそのものにすり替えたくなるほど憎いんだね

520 :仕様書無しさん:2018/06/19(火) 19:50:15.21 .net
DIを使うとコードが1割、2割は確実に増える
経験的に最悪で2倍ぐらいかな

521 :仕様書無しさん:2018/06/19(火) 19:53:29.08 .net
DIのデメリットはコードが増えると言うよりも
価値がないコードができるということ

522 :仕様書無しさん:2018/06/19(火) 19:56:12.12 .net
>>520
ああテストコードのない昔々の話ですね

523 :仕様書無しさん:2018/06/19(火) 19:56:32.85 .net
>>521
価値がないコードを書く開発者は死ね

524 :仕様書無しさん:2018/06/19(火) 20:02:42.71 .net
シェルのパイプラインでサクサクつなげて30秒で入力おわり即実行みたいな処理も
JavaやC#でDIを使うとサブプロセスをインターフェースで隠蔽してインジェクト、
データベースもインジェクト、Webアクセスもインジェクト、設定ファイル読むのもインジェクト
って具合にアホみたいに大量のクラスとインターフェースが作られる
ビルドも遅いしコンテナサービスセットアップしてクラス全部登録すんのも超めんどくさい

525 :仕様書無しさん:2018/06/19(火) 20:03:46.05 .net
>>523
だから俺は価値がないDIを使わないって。
DIは特になにか必要になってるわけじゃないのに
こんなふうに(冗長に)書け。そうすれば
そのうち役に立つかもしれないって押し付けるパターンだからね

526 :仕様書無しさん:2018/06/19(火) 20:56:39.77 .net
そしてそれは役に立った試しのない不良債権

527 :仕様書無しさん:2018/06/19(火) 22:02:31.07 .net
>>525
はいキチガイ

528 :仕様書無しさん:2018/06/21(木) 22:54:49.91 .net
>>524
それで済む程度の処理にDIなんか使うわけないじゃん
「同僚」とやらが実在するなら注意してあげな

529 :仕様書無しさん:2018/06/21(木) 23:06:29.63 .net
そのとおり
DIなんて使うわけないんだよ普通はね

530 :仕様書無しさん:2018/06/22(金) 01:56:38.02 .net
>>529
その程度の処理にはね

531 :仕様書無しさん:2018/06/22(金) 06:38:06.50 .net
ではどういうときに必要になるかと言うと、
その具体例はでてこないという
だって、必要だからDIを使うのではなく
とりあえずDIを使っとけになってるから

532 :仕様書無しさん:2018/06/22(金) 07:37:02.36 .net
>>531
はいキチガイ

533 :仕様書無しさん:2018/06/22(金) 08:38:38.75 .net
あーあ反論不能になっちゃったか

534 :仕様書無しさん:2018/06/22(金) 08:42:43.84 .net
しょぼい案件で工数がそれほど見込めない時に水増しする為に無駄な実装でかさ上げするのに有効。

535 :仕様書無しさん:2018/06/22(金) 12:43:45.41 .net
>>533
キチガイに反論しても無駄やろ

536 :仕様書無しさん:2018/06/22(金) 22:21:24.02 .net
キチガイは微笑んでいる

537 :仕様書無しさん:2018/06/23(土) 09:39:53.14 .net
DIは最高すぎるけどなぁ
本当に同じものについて語ってるのだろうか

538 :仕様書無しさん:2018/06/23(土) 09:49:23.45 .net
ドリル使って棚作ったりとか最高だよな

539 :仕様書無しさん:2018/06/23(土) 11:07:26.10 .net
300行で書けるスクリプトがJavaとDIのせいで2000行ぐらいに膨れ上がった
ほんと害悪なんだが

540 :仕様書無しさん:2018/06/23(土) 11:53:31.05 .net
それはJavaがウンコな所為でしょ

541 :仕様書無しさん:2018/06/23(土) 12:06:21.86 .net
DIは最高だ。どこがだって?さぁ?

542 :仕様書無しさん:2018/06/23(土) 13:43:59.61 .net
ドカタがドカタ言語で書くとDIは冗長になるのは分かるよ?
でもそれはドカタが悪いのであってDIの所為じゃない
こっちはDI使ってシンプルで読みやすく保守しやすいコードが書けるんだから寄ってくんな

543 :仕様書無しさん:2018/06/23(土) 13:50:39.96 .net
Javaお前死なないよな

544 :仕様書無しさん:2018/06/23(土) 13:54:28.72 .net
というかjavaやc#がうんこだからDIで安全マージンとりながらやらなければならない
スクリプトだったらそんなん要らん

545 :仕様書無しさん:2018/06/23(土) 14:30:18.17 .net
それDIYや

546 :仕様書無しさん:2018/06/23(土) 14:34:16.65 .net
おそいよ

547 :仕様書無しさん:2018/06/23(土) 14:58:12.71 .net
>>542
> ドカタがドカタ言語で書くとDIは冗長になるのは分かるよ?
俺はわかんないよ

なんで、ドカタがドカタ言語で書くとDIは冗長になるのか
説明してくれよ

548 :仕様書無しさん:2018/06/23(土) 15:53:13.03 .net
ドカタは何で書こうが冗長になるものだ

549 :仕様書無しさん:2018/06/23(土) 16:25:52.61 .net
DIで冗長になる前提で話してるのが意味不明
冗長になるって言うならコード書いてみてよ

550 :仕様書無しさん:2018/06/23(土) 16:29:22.88 .net
ドカタがドカタ言語でどんなコード書くのか興味深い

551 :仕様書無しさん:2018/06/23(土) 16:51:07.46 .net
どかたこーど世の中に腐るほどあるぞい

552 :仕様書無しさん:2018/06/23(土) 17:07:44.52 .net
じゃあお題

$app = New-Object -ComObject Excel.Application
$app.DisplayAlerts = $false
$app.Visible = $false
Remove-Item ./* -Recurse
git clone $env.REPO_URL
Get-ChildItem ./spread/*.xlsx | foreach {
$book = $app.Workbooks.Open($_.FullName)
$sheet = $app.Worksheets("datasheet")
[pscustomobject]@{
Foo = $sheet.Range("A1").Text
Bar = $sheet.Range("D5").Text
Baz = $sheet.Range("G2").Text
}
$.Close($false)
} | where { $_.Foo -ne "xxx" } | foreach {
$cmd = "insert into XlsxImp (foo,bar,baz) values ('$($_.Foo)', '$($_.Bar)', '$($_.Baz)');"
$cmd | sqlplus -s -l $env.DB_CONN_STR as sysdba
}
$app.Quit()

JavaとDIを使うとどうなる?

553 :仕様書無しさん:2018/06/23(土) 17:32:18.41 .net
>>552
java -jar app.jar

554 :仕様書無しさん:2018/06/23(土) 18:34:11.17 .net
ドカタはexcel使う必要あるんだね
成る程ドカタだわ

555 :仕様書無しさん:2018/06/23(土) 19:14:20.37 .net
ほらみたことか
DIじゃろくな事にならないからって無様な捨ぜりふ吐いて逃げるんだもんなぁ
普段偉そうなこと言ってるわりにこれだもん
DI厨の限界見えたわ

556 :仕様書無しさん:2018/06/23(土) 19:32:29.71 .net
処理の概要とideone.comなどコードが見易い所にあげるぐらいの気遣いは欲しいな

色んな依存はある気がするが処理がこれしかないならこのままでいいんじゃね?

557 :仕様書無しさん:2018/06/23(土) 19:36:15.29 .net
DI厨「DIの不利を悟ったから関係ないこと言ってお茶を濁そう」

558 :仕様書無しさん:2018/06/23(土) 19:41:55.71 .net
全体で20行ぐらいのコードしかないのに
DIする奴いるの?

559 :仕様書無しさん:2018/06/23(土) 19:44:18.96 .net
アンチDIって、DIやってる人がいつでもどこでもDIやってると思ってるんだろうか

560 :仕様書無しさん:2018/06/23(土) 19:45:00.97 .net
>>552
javaの方がシンプルに書けたらpsの存在意義ってなんだよアホ

561 :仕様書無しさん:2018/06/23(土) 19:50:03.16 .net
Mochなどと同じで汎用性が欲しい時、テストとかしやすくしたいときに使おうってだけの話だよね

562 :仕様書無しさん:2018/06/23(土) 19:51:43.39 .net
>>561
またテストか。DIはテストだけのものじゃないって言ってるだろ

563 :仕様書無しさん:2018/06/23(土) 19:54:55.70 .net
クッソ笑える
DI厨全滅かよwww
なーにが「い、いつもDIするわけじゃねーし」(ふるえ声)
だよwwwww

564 :仕様書無しさん:2018/06/23(土) 19:55:33.89 .net
>>560
おう書いてみろや、ご自慢のDI使ってな

565 :仕様書無しさん:2018/06/23(土) 19:58:43.75 .net
じゃあJavaとDIでシステム組んで最後の1つの機能が>>552で、これ移植したら円満にプロジェクト終了って時はどうすんの?
そうなってもいつもDIするわけじゃねーし、だの、1つくらいDIじゃなくても問題ないなんつって逃げそうだよなお前らw

566 :仕様書無しさん:2018/06/23(土) 20:07:51.84 .net
>>564
適材適所がわからないんだな
スクリプトでやるようなことをDI使ってやれって、頭沸いてんのか?

567 :仕様書無しさん:2018/06/23(土) 20:15:23.96 .net
>>566
やっぱり言い訳するんだ
99%Javaで美しいDIで一生懸命組み上げたシステムの最後のピースがやっつけのスクリプトってさぁ
やれやれだよホント

568 :仕様書無しさん:2018/06/23(土) 20:16:09.73 .net
なぜ全てをJavaで作ろうとするのか理解不能

569 :仕様書無しさん:2018/06/23(土) 20:21:25.49 .net
宿題かな?

570 :仕様書無しさん:2018/06/23(土) 20:23:34.02 .net
まったくだ
JavaもDIも役立たずのゴミ
スクリプトを書いたほうが短く簡潔で保守性も高まる

571 :仕様書無しさん:2018/06/23(土) 20:29:07.45 .net
全ての規模をスクリプトで書くのか
まあがんばれ

572 :仕様書無しさん:2018/06/23(土) 20:32:13.56 .net
>>571
少なくともここにいるDI厨はスクリプトでやるらしいぞ
大規模システムの一部という前提を与えてやってもDIでやる場面じゃないだのなんだのと言い訳してDIを拒む
じゃあもうどこでDIすんだって話だよ

573 :仕様書無しさん:2018/06/23(土) 20:36:24.75 .net
必死過ぎないか?

574 :仕様書無しさん:2018/06/23(土) 20:39:30.85 .net
噛みつくなら規約作ったアホ上司に噛み付けよ

575 :仕様書無しさん:2018/06/23(土) 20:41:56.64 .net
おうおう
出るわ出るわ負け惜しみ
ここでサクッとJavaのDI使ったコードを書いて黙らせるぐらいのことできんのかねぇ

576 :仕様書無しさん:2018/06/23(土) 20:59:21.58 .net
>>544
具体的に

577 :仕様書無しさん:2018/06/23(土) 21:00:14.54 .net
>>576
>>552

578 :仕様書無しさん:2018/06/23(土) 21:00:52.36 .net
>>577
それのどこがC#なんだよwww

579 :仕様書無しさん:2018/06/23(土) 21:01:55.23 .net
>>578
何言ってんだ?
スクリプトならサクッと書けるって例だが?

580 :仕様書無しさん:2018/06/23(土) 21:08:21.11 .net
Javaで作るような大規模システムをサクッと書いてよ

581 :仕様書無しさん:2018/06/23(土) 21:33:48.06 .net
エクセルの内容をノールックでDBに入れるだけの簡単なお仕事

582 :仕様書無しさん:2018/06/23(土) 21:36:44.37 .net
簡単なお仕事もDIを使うと途端に大事になる

583 :仕様書無しさん:2018/06/23(土) 21:53:04.63 .net
書き直す気力も起きない程の圧倒的ドカタコードを提示する事で
相手のヤル気を削ぐ作戦に出るとは恐れ入った

584 :仕様書無しさん:2018/06/23(土) 21:54:07.34 .net
はいDI敗北宣言頂きましたー

585 :仕様書無しさん:2018/06/23(土) 21:58:29.47 .net
>>579
どうウンコなのか具体的にってことだろカス

586 :仕様書無しさん:2018/06/23(土) 21:58:54.99 .net
そんな無理して導入しなくてもw

587 :仕様書無しさん:2018/06/23(土) 22:00:27.65 .net
DIは百害あって一利なし
利用者もゼロ
これが現実

588 :仕様書無しさん:2018/06/23(土) 22:01:30.65 .net
>>587
どこの世界の話だよ

589 :仕様書無しさん:2018/06/23(土) 22:02:00.76 .net
>>587
自分ができないことってこき下ろしたくなるんだよね

590 :仕様書無しさん:2018/06/23(土) 22:02:25.98 .net
>>588
この世界だよ

591 :仕様書無しさん:2018/06/23(土) 22:02:45.06 .net
>>587
これ見るとDIアンチはただの病気だってことがよくわかる

592 :仕様書無しさん:2018/06/23(土) 22:02:56.36 .net
>>590
現実を見なさい

593 :仕様書無しさん:2018/06/23(土) 22:03:11.72 .net
>>589
できるが無駄が多すぎと言ってる
そもそも出来ない君たちとは違うんだな

594 :仕様書無しさん:2018/06/23(土) 22:03:34.42 .net
>>590
利用者がゼロのソースはよ

595 :仕様書無しさん:2018/06/23(土) 22:04:11.55 .net
>>593
できないんだねかわいそうに

596 :仕様書無しさん:2018/06/23(土) 22:04:19.06 .net
>>591
そうやって悪口言うしか出来ないんだね
完全敗北ってやつだよソレ

597 :仕様書無しさん:2018/06/23(土) 22:04:58.22 .net
>>596
被害妄想おつ

598 :仕様書無しさん:2018/06/23(土) 22:05:31.60 .net
>>596
利用者ゼロのソース

599 :仕様書無しさん:2018/06/23(土) 22:05:39.48 .net
>>592
みた結果がこれだよ

>>594
普段からDI推奨してるこのスレの住民ですらお題を出したらまったくDIを使わないということが明るみに出てしまった

600 :仕様書無しさん:2018/06/23(土) 22:06:37.64 .net
>>597
ほらまた言った
負け惜しみの悪口はやめて素直に参りましたって言えば良いのの

601 :仕様書無しさん:2018/06/23(土) 22:06:51.18 .net
>>599
ソースは5ちゃんwww

602 :仕様書無しさん:2018/06/23(土) 22:07:19.38 .net
こんなところで煽っても月曜日は来るんだよ

603 :仕様書無しさん:2018/06/23(土) 22:07:56.83 .net
>>600
利用者ゼロのソースまだ?

604 :仕様書無しさん:2018/06/23(土) 22:09:16.56 .net
プログラマならコードで語れ
DI派はDI使ったコードを書いてようやっと議論のスタートラインに立てる
でも何を言われても書かこうとしない
負けを認めてんだよ内心ではね
でも悔しいから負けたという事実は言葉にはせず悪口に逃げるんだ

605 :仕様書無しさん:2018/06/23(土) 22:10:17.96 .net
>>603
君がお題に対してDIを使ったコードを書いたら1にカウントしてやるよ

606 :仕様書無しさん:2018/06/23(土) 22:10:18.71 .net
>>604
利用者ゼロのソースまだ?

607 :仕様書無しさん:2018/06/23(土) 22:11:25.14 .net
業務用のコードこんなところで晒して勝った気になるのはまずくないか?

608 :仕様書無しさん:2018/06/23(土) 22:11:27.38 .net
>>605
利用者ゼロのソースまだ?

609 :仕様書無しさん:2018/06/23(土) 22:13:05.62 .net
>>608
レスしたんだが?
読み返して

610 :仕様書無しさん:2018/06/23(土) 22:13:26.79 .net
>>609
利用者ゼロのソースまだ?

611 :仕様書無しさん:2018/06/23(土) 22:19:15.69 .net
>>610
レスしたんだが?
読み返して

612 :仕様書無しさん:2018/06/23(土) 22:19:36.58 .net
>>611
利用者ゼロのソースまだ?

613 :仕様書無しさん:2018/06/23(土) 22:21:01.53 .net
ソースは5ちゃんやで

614 :仕様書無しさん:2018/06/23(土) 22:21:34.31 .net
そもそもオブジェクト指向もDIも大規模開発の複雑さに立ち向かうための手法なのに、それを理解してない奴が
1ファイルのスクリプトを例に出して、ほらDIなんていらない、とかドヤってんだよなww

615 :仕様書無しさん:2018/06/23(土) 22:25:58.69 .net
>>614
大規模開発の奴隷なんだよわかってやれや

616 :仕様書無しさん:2018/06/23(土) 22:28:28.13 .net
>>611
ほらここにDI不要論あげてこいよ
https://github.com/aspnet/Mvc/issues

617 :仕様書無しさん:2018/06/23(土) 22:29:44.72 .net
>>614
雑魚の理論
小さいまとまりの集まりで大きなものを作るんだ
大きくなると造りを変えないといけないんんてのは多分何も作れてないんだそいつ

618 :仕様書無しさん:2018/06/23(土) 22:30:59.31 .net
>>617
>>616

619 :仕様書無しさん:2018/06/24(日) 02:37:42.98 .net
>>552
このくらいの規模だとDIに限らず
関数もクラスもモジュールもクロージャも要らないけど
だからって大きなプログラムで不要な事にはならないよね?

いや、もしかしたらドカタはmain関数で全てやりくりするから不要なのかな?w

620 :仕様書無しさん:2018/06/24(日) 02:41:43.67 .net
>>619
もしかして、クラスに分ける=DIを使うと思ってる?
ならアホだよ。

main関数ですべてやりくりするわけ無いじゃん。
DIは使わずにクラスに分けるだけ

はぁ。そんなこともわからんのかね

621 :仕様書無しさん:2018/06/24(日) 02:49:59.29 .net
>>552にDIが不要だからって、常にDIが不要な事を示せてないって言ってるだけなんだけど
>>620には理解できなかったみたいだねw
流石ドカタやってるだけあるわ

622 :仕様書無しさん:2018/06/24(日) 02:54:53.60 .net

お前はDIがいると言ってる。
俺はいらないと言ってる。

で?お前はDIがいると言うだけ?
理由は? お前がDIがいると言ってることなんて
最初からわかってるんだよ。理由を言え

623 :仕様書無しさん:2018/06/24(日) 03:00:39.24 .net
俺にはDIはいるけどお前のようなドカタには不要だよ
だから意見は一致している
ドカタはドカタとして生きていけ

624 :仕様書無しさん:2018/06/24(日) 05:01:36.24 .net
また必要な理由がかいてない。
いつもそうだ

625 :仕様書無しさん:2018/06/24(日) 05:09:32.51 .net
>>624
>>616

626 :仕様書無しさん:2018/06/24(日) 07:50:21.99 .net
スクリプト厨「DIが優れてるというなら>>552をDI使って書き直してみろ」

DI厨「いつでもDIするわけじゃない。この程度ならDIは不要」

スクリプト厨「じゃあこの処理が大規模システムの一部だったらと仮定しよう。他の99%の機能はDIで作られてるので、アーキテクチャの一貫性のためにこの機能もDIで実装しなきゃならないよね」

DI厨「罵詈雑言。罵詈雑言。罵詈雑言」

これじゃあどう見てもDI厨の負けだぞ
お前ら普段からDIなんて使ってないんだろ?

627 :仕様書無しさん:2018/06/24(日) 08:51:28.32 .net
>>625
なんで逃げるの?

628 :仕様書無しさん:2018/06/24(日) 09:23:11.71 .net
DI厨弱すぎwww

629 :仕様書無しさん:2018/06/24(日) 09:24:12.28 .net
>>552をクラスには分けないんでしょ?
なんでDIだけ入れろというの?

630 :仕様書無しさん:2018/06/24(日) 10:32:58.22 .net
>>629
分けたいなら分ければ?
DIに必要なことならなんでもやっていいよ
まっ無駄な工数だけどDIには必要なんだろ

631 :仕様書無しさん:2018/06/24(日) 10:53:08.78 .net
依存オブジェクトの固定化をやめるだけで盛り上がってるな

632 :仕様書無しさん:2018/06/24(日) 11:01:23.65 .net
>>630
20行のコードを
クラスに分ける必要ないし
DIにする必要もない
でもだからと言ってクラスもDIも不要にはならない

633 :仕様書無しさん:2018/06/24(日) 11:11:53.36 .net
>>632
必要ないなら不要じゃん

634 :仕様書無しさん:2018/06/24(日) 11:16:56.77 .net
>>633
ドカタ「じゃあこの処理が大規模システムの一部だったらと仮定しよう。
他の99%の機能は関数で作られてるので、アーキテクチャの一貫性のために
この機能も関数で実装しなきゃならないよね」

635 :仕様書無しさん:2018/06/24(日) 11:27:18.90 .net
>>634
はやくDIしてよ
ドカタにはDIは難しいすぎたか?

636 :仕様書無しさん:2018/06/24(日) 11:32:08.03 .net
DIするとテストが簡単になるらしい。
なら>>552のコードをテストしていただきたい
それでDIの真価が発揮されるのだろう?

637 :仕様書無しさん:2018/06/24(日) 11:39:02.13 .net
$app = New-Object -ComObject Excel.Application

お前はCOMのインターフェースを実装したオブジェクトをインジェクションしている

638 :仕様書無しさん:2018/06/24(日) 11:51:50.39 .net
>>637
じゃあそれをインジェクションしないコードに書き換えてみてよ


できないでしょ?w
なんでもかんでもインジェクションといってるから
恥をかくんだよ。

639 :仕様書無しさん:2018/06/24(日) 11:52:26.90 .net
DI厨ってさ遊び半分なんだよね
論理的にDIが綺麗だってのはわかるよ
でも現実の仕事じゃコードを冗長でわかりにくくしてるだけ
テストもモック書くのがめんどくさいし
工数を数倍に膨らませてまでやるこっちゃない

640 :仕様書無しさん:2018/06/24(日) 12:01:39.85 .net
COMから見た話だと分からないドカタさん

641 :仕様書無しさん:2018/06/24(日) 12:03:38.61 .net
>>640
実装に依存した考え方しかできないなら
ドカタと言われてもしょうがないね

642 :仕様書無しさん:2018/06/24(日) 12:05:39.60 .net
DIはいらない。COMで全部作れば
インジェクションになるからだ

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

俺の考えるDIこそが世界唯一のDIなんだ!

643 :仕様書無しさん:2018/06/24(日) 12:07:55.57 .net
という茶番からもわかるように、

依存関係を"ひとまとめに"定義する部分と、それを利用するために
オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン
でないものはDIではないのです。
DIではないのだからインジェクションと読んではいけません

644 :仕様書無しさん:2018/06/24(日) 12:16:00.83 .net
依存関係を動的に変えたいときどうするの?

645 :仕様書無しさん:2018/06/24(日) 12:17:59.88 .net
適切なデザインパターンを適用すればいいだけでは?

つまり依存関係をひとまとめに定義なんかする必要はないということ
それはDIではないということを意味する

646 :仕様書無しさん:2018/06/24(日) 12:19:14.76 .net
>>641
COMは実装に依存していない

647 :仕様書無しさん:2018/06/24(日) 12:28:21.32 .net
>>645
静的なのは定義していいんじゃないの?

648 :仕様書無しさん:2018/06/24(日) 13:01:52.67 .net
>>646
COMに依存してるって話

649 :仕様書無しさん:2018/06/24(日) 13:03:23.73 .net
>>646
ほとんど切り離し不可能
COMは実装ありきのインターフェースだから複雑すぎるんだよ

650 :仕様書無しさん:2018/06/24(日) 13:40:51.42 .net
>>648
は?>>552のコードをDIで抽象に依存しろと?

651 :仕様書無しさん:2018/06/24(日) 14:43:53.04 .net
interface IExcelFileProvider {
IEnumerable<FileInfo> GetExcelFiles();
}

class GitExcelFileProvider {
private GitExcelFileProviderOptions Options { get; }
public GitExcelFileProvider(IOptions<GitExcelFileProviderOptions> options) {
Options = options.Value;
}
public IEnumerable<FileInfo> GetExcelFiles() {
if (Directory.Exists(Options.LocalRepo)) Directory.Delete(Options.LocalRepo, true);
Directory.Create(Options.LocalRepo);
var spi = new StartProcessInfo("git", $"clone {Options.RemoteRepo}");
spi.WorkingDirectory = Options.LocalRepo;
var proc = Process.Start(spi);
proc.WaitForExit();
var spreaddir = Path.Combine(Options.LocalRepo, "spread");
return Directory.GetFiles(spreaddir, "*.xlsx");
}

Gitの処理だけで力尽きたわ
DIってバカバカしいなぁ
Javaだとさらに長くなるんだろこれ

652 :仕様書無しさん:2018/06/24(日) 15:51:30.46 .net
何でもインラインで空行も入れないから見にくくてしかたないな

653 :仕様書無しさん:2018/06/24(日) 15:58:21.88 .net
DI使うと可読性が下がるってことだな

654 :仕様書無しさん:2018/06/24(日) 16:01:34.67 .net
DIのせいにすればいいんだから楽になるじゃん

655 :仕様書無しさん:2018/06/24(日) 16:19:03.87 .net
こんな汚いコード書く奴がDIの可読性うんぬん言ってんだから滑稽だわ

656 :仕様書無しさん:2018/06/24(日) 16:23:27.70 .net
威勢のいいことを言うけど綺麗なDIコードは書けない
それがDI厨なんだなぁ
プログラマならコードで語りなよ
ほんと情けないよDI厨

657 :仕様書無しさん:2018/06/24(日) 16:26:08.21 .net
威勢がいいのかこれ

658 :仕様書無しさん:2018/06/24(日) 16:30:08.44 .net
むしろ打ちのめされて元気ないように見えるDI信者さんたち

659 :仕様書無しさん:2018/06/24(日) 16:32:48.10 .net
打ちのめされてというか飽きてないか?

660 :仕様書無しさん:2018/06/24(日) 16:37:23.63 .net
そっか
負けっぱなしじゃツマラナイもんな
飽きてもしゃあない

661 :仕様書無しさん:2018/06/24(日) 16:39:07.65 .net
虚しい勝利だな

662 :仕様書無しさん:2018/06/24(日) 16:40:34.53 .net
>>656
>>616

663 :仕様書無しさん:2018/06/24(日) 16:50:03.69 .net
>>616に書けたら本物だな

664 :仕様書無しさん:2018/06/24(日) 20:52:07.62 .net
ここまでのやり取りで、ドカタはエンジニア様がDI使って作ったものを
10行程度のスクリプトで利用するだけだって分かったね
良かったよかった

665 :仕様書無しさん:2018/06/24(日) 21:25:09.37 .net
ドカタが10行程度のスクリプトでできる事をDI厨はできなかったという事だよ

666 :仕様書無しさん:2018/06/24(日) 21:27:30.26 .net
ドカタ「じゃあこの処理が大規模システムの一部だったらと仮定しよう。
他の99%の機能はクラスで作られてるので、アーキテクチャの一貫性のために
この機能もクラスで実装しなきゃならないよね」

667 :仕様書無しさん:2018/06/24(日) 21:29:48.89 .net
>>666
なんでもかんでもDIすりゃいいってもんじゃない
99%DIだろうとこの程度のスクリプトにはDIは使わん
サブプロセス呼び出しで十分

668 :仕様書無しさん:2018/06/24(日) 22:51:07.15 .net
>>552もよく見りゃDBの接続を環境変数に外出ししてるな

こういった処理が数100もあって、例えば対象のフォルダ、シート名、セル参照、テーブル名といったものが微妙に違った時に、否定派はその都度書くのだろうか?

669 :仕様書無しさん:2018/06/24(日) 22:58:23.13 .net
微妙に違うならパタメタライズすればいいだけだよ?
むしろそういうのはDIのほうが苦手
DIはどちらかというと特化する方向に作りこんでいくからな
リポジトリなんてほとんどテーブルと1:1だろ?
テーブルが100個あったらインターフェースとクラスとエンティティが100個ずつできる
スクリプトならパラメータ化したやつ1個で十分

670 :仕様書無しさん:2018/06/24(日) 23:01:59.04 .net
シート名やセル参照も同じ
DIだと神エクセルのパターンごとに読み取りクラスを作る
神エクセルの種類が100パターンあったら読み取りクラスも100種類
バカバカしいよほんと
スクリプトならシート名とセルアドレス、プロパティのマッピング定義を指定するだけでOKな関数を1つ書くだけなのにな

671 :仕様書無しさん:2018/06/24(日) 23:08:22.10 .net
思い込みが強くて応用の効かない阿玉の固い人間というのは良くわかった

672 :仕様書無しさん:2018/06/24(日) 23:09:00.66 .net
阿玉の×
頭の○

673 :仕様書無しさん:2018/06/24(日) 23:47:42.34 .net
DI厨惨めな敗走

674 :仕様書無しさん:2018/06/25(月) 00:17:07.79 .net
DIはクラス間の依存関係を解決するためのもので、
設定ファイルから設定値を読み込むのはDIじゃない

675 :仕様書無しさん:2018/06/25(月) 07:33:14.28 .net
設定値の読み込みはインフラに依存するのでDIしないとだめだよ

676 :仕様書無しさん:2018/06/25(月) 07:59:06.06 .net
なんでもDIでやるからほら変な癖がついてる
DIでやる必要のないものまでDIでやってる
設定の読み込みはDIとは無関係

677 :仕様書無しさん:2018/06/25(月) 09:50:30.59 .net
設定をコードに散らばらせずに一箇所にまとめるメリットは分かるのに
クラスの依存関係をコードに散らばらせずに一箇所にまとめるメリットは分からないの?

678 :仕様書無しさん:2018/06/25(月) 09:58:08.32 .net
設定だから一箇所にまとめることにメリットあるわけで、
設定じゃないものは、一箇所にまとめるメリットないぞ?
すべての処理を一箇所にまとめたらデメリットだってわかるだろ?

一箇所にまとめる = メリットなんじゃなくて
設定を一箇所にまとめる = メリットなんだよ

679 :仕様書無しさん:2018/06/25(月) 10:07:35.16 .net
いや、シングルトンは1箇所だろ。そんだけ。

680 :仕様書無しさん:2018/06/25(月) 10:52:37.67 .net
「設定」は一箇所だろではなく
「シングルトン」は一箇所だろに
話が変わっているところに注意

今話をしているのは「設定」だから
一箇所にすることにメリットが有るという話で
設定じゃないもの(クラスやシングルトン)は
一箇所にしたところでメリットはない

681 :仕様書無しさん:2018/06/25(月) 10:57:10.70 .net
データベースも最終的に呼び出す場所は1箇所だけどな。

682 :仕様書無しさん:2018/06/25(月) 11:01:24.41 .net
いや、シングルトンの実体は1箇所だろ

683 :仕様書無しさん:2018/06/25(月) 11:02:48.36 .net
なるほど、設定だから、一箇所にまとめるわけですね。
設定じゃないものは、まとめないしDIを使う必要もないと

684 :仕様書無しさん:2018/06/25(月) 11:06:14.17 .net
DI厨の基本能力が低すぎる。
すぐ矛盾点が露呈するし
言ってることの辻褄が合ってない

たぶんなにも考えずいわれるがまま
DIを使ってるんだろうな

685 :仕様書無しさん:2018/06/25(月) 11:28:48.73 .net
DI否定厨のシングルトン分かってない感がすごい

686 :仕様書無しさん:2018/06/25(月) 11:31:11.55 .net
>>678
>すべての処理を一箇所にまとめたらデメリットだってわかるだろ?

クラスの依存関係は処理じゃない
一種の設定です

687 :仕様書無しさん:2018/06/25(月) 11:32:34.93 .net
クラスの依存関係は、アプリの利用者が
変更するものではないので設定ではありません

688 :仕様書無しさん:2018/06/25(月) 11:35:01.56 .net
えっ?
じゃあ定数とか設定に追い出さないで
全部コードにマジックナンバー埋め込むってこと?
DI否定厨は凄いなぁw

689 :仕様書無しさん:2018/06/25(月) 11:37:12.61 .net
>>688
マジックナンバーは定数にはしますが
設定にはしませんよw

定数と設定を並べて書いても、
私は引っかかりませんwww

690 :仕様書無しさん:2018/06/25(月) 11:42:14.37 .net
またDI厨の行き当たりばったり感あふれるレスが
一瞬で潰されたのかw

691 :仕様書無しさん:2018/06/25(月) 11:48:36.29 .net
いや、お前が定数を設定を呼ぼうが何と呼ぼうが勝手だが
定数は一箇所にまとめるだろ?メリットあるだろ?
DIも一緒だからね
言葉遊びで逃げないで、このメリット否定してみてよ

692 :仕様書無しさん:2018/06/25(月) 11:57:03.79 .net
設定は一箇所にまとめる。そんだけ
設定じゃないもの話を持ってくるな
連想ゲームやってるんじゃねーんだ

693 :仕様書無しさん:2018/06/25(月) 11:57:39.62 .net
> 定数は一箇所にまとめるだろ
普通モジュールごとに定義する場所を分けるわなw

694 :仕様書無しさん:2018/06/25(月) 12:04:07.32 .net
じゃあ定数をモジュール別にわけるメリットを言ってみろよ!


という感じで、なし崩し的に、
わけたほうが良いという話題に持っていきません?w

695 :仕様書無しさん:2018/06/25(月) 12:12:04.12 .net
夢見がちな設定まとめ厨には残念なお知らせだが、現実の世界では設定は一箇所にはまとめんよ
クラウド、データベース、レジストリ、ローカルファイル、定数クラス、エントリーポイント、、、
目的や要件によってどこに設定を置くべきかは変わってくるし、置き場によって取得方法は異なる
でも設定を利用する側のクラスは設定値だけが欲しいのであって、設定がどこにあるか、どうやってとってくるのかは意識したくない
なので設定読み取りをクラスにしてインジェクションするんだよ
設定読み込みにDIは必須と言える
DIは素晴らしい!最高だ!

696 :仕様書無しさん:2018/06/25(月) 12:13:12.86 .net
ということで、設定でも
まとめたりしないということで、
DI厨はピンチに陥りましたw

697 :仕様書無しさん:2018/06/25(月) 12:16:48.19 .net
common.Constantsスタティッククラスに定数を一生懸命集める香具師、オブジェクト指向全くわかってない

698 :仕様書無しさん:2018/06/25(月) 12:31:55.36 .net
>>690
>>616

699 :仕様書無しさん:2018/06/25(月) 14:49:14.34 .net
モジュール毎にまとめるか、アプリの単位でまとめるかは、システムによるからなぁ

700 :仕様書無しさん:2018/06/25(月) 17:49:44.56 .net
newでインスタンス生成ってマジックナンバー埋め込みと一緒じゃん

701 :仕様書無しさん:2018/06/25(月) 18:35:43.18 .net
ぜんぜん違うだろ

702 :仕様書無しさん:2018/06/25(月) 19:05:08.92 .net
>>701
変更したくなったときに全体調べて書き換えていく必要がある点が一緒じゃん

703 :仕様書無しさん:2018/06/25(月) 19:15:36.22 .net
DBのドライバをクラス名で設定ファイルに書くのはDI?

704 :仕様書無しさん:2018/06/25(月) 19:34:00.00 .net
DBのドライバは、アプリの利用者が
変更するものではないので設定ではありません

705 :仕様書無しさん:2018/06/25(月) 19:35:41.34 .net
なんか狭い定義だな…

706 :仕様書無しさん:2018/06/25(月) 19:42:09.87 .net
我々が設定ファイルと呼んでるものはDI否定厨にとっては設定ファイルじゃないらしいが、
じゃあ何て名前で呼んでるんだろう?

707 :仕様書無しさん:2018/06/25(月) 20:35:25.25 .net
一時的なものならハードコートした方が手っ取り早いのは当たり前だあな

708 :仕様書無しさん:2018/06/25(月) 20:55:37.95 .net
>>702
> 変更したくなったときに全体調べて書き換えていく必要がある点が一緒じゃん

マジックナンバーを変更したいととなんてないんですが?

709 :仕様書無しさん:2018/06/25(月) 20:56:15.28 .net
>>703
> DBのドライバをクラス名で設定ファイルに書くのはDI?

全く違う

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

710 :仕様書無しさん:2018/06/25(月) 20:57:30.11 .net
>>705
> 我々が設定ファイルと呼んでるものはDI否定厨にとっては設定ファイルじゃないらしいが、

設定ファイルと読んでいるものではなくて、
その設定ファイルそのものを見せてくれませんかね?

どう見ても設定ファイルではないと一蹴してあげますんでw

711 :仕様書無しさん:2018/06/25(月) 21:41:49.07 .net
またDIとDIコンテナを近藤してる

712 :仕様書無しさん:2018/06/25(月) 21:43:26.43 .net
DI不要論あげてこいよ
https://github.com/aspnet/Mvc/issues

713 :仕様書無しさん:2018/06/25(月) 22:19:44.20 .net
有名なフレームワークは様々な需要に応えなきゃならん
本来不要なDIも一部のワガママで削除することができない

714 :仕様書無しさん:2018/06/25(月) 22:27:44.41 .net
誰がそんなこと言ってたわけ?
お前?

715 :仕様書無しさん:2018/06/25(月) 22:40:43.99 .net
>>710
SpringのapplicationContext.xmlは設定ファイルじゃなかったら何なの?

716 :仕様書無しさん:2018/06/25(月) 23:17:53.53 .net
>>715
あー、そういうこと?

アプリの動作を変えるために、アプリの利用者が設定するファイルと
アプリをビルドするのに必要なファイルをごっちゃにしてるのか。

今の話は、アプリ利用者が設定するファイルの話
その設定ファイルは一つにまとめるメリットは有るが
アプリをビルドするのに必要なファイルはそうする必要ないでしょってこと

717 :仕様書無しさん:2018/06/25(月) 23:31:45.11 .net
設定を1ファイルに書くとめちゃくちゃになる
使うクラスごとに設定ファイルを分けろ

718 :仕様書無しさん:2018/06/25(月) 23:37:29.86 .net
>>716
お前以外はアプリ利用者の設定なんて話はしてなかったぞ
ていうかDIの分脈でアプリ利用者の設定ファイルなんて出てくるわけないじゃん
お前ワザと話を逸らしてるんじゃなかったら頭の病気を疑った方が良いぞ

719 :仕様書無しさん:2018/06/25(月) 23:40:21.52 .net
DIは依存関係を集約するが、それを1ファイルに書かなきゃいけないなんて決まりはない

720 :仕様書無しさん:2018/06/26(火) 00:08:33.09 .net
>>716
結局>>715は設定ファイルなんですか?はっきり答えてください。
そして>>703をapplicationContext.xmlに書いたらDIにならないのは何故ですか?

721 :仕様書無しさん:2018/06/26(火) 00:19:34.15 .net
>>718
は? 接続先DBとか、アプリをビルドするために必要なものじゃなくて
アプリのユーザーが指定するものじゃん
(ローカルデータベースじゃなくて、DBサーバーを指定する場合)
設定ファイルってこういう物の話でしょ?

で、話を戻すけど、そういうアプリのユーザーが決める設定ファイルは
一箇所で指定する必要あるけど、そうでないものは一箇所で指定しなくていい
だからDIを使って一箇所に依存関係をまとた方が良いという理由にはならんのだ

722 :仕様書無しさん:2018/06/26(火) 00:25:34.41 .net
>>720
> 結局>>715は設定ファイルなんですか?はっきり答えてください。
わかったわかった。設定ファイルでいいよ

アプリをビルドするのに必要な設定ファイル。
ただしこのタイプの設定ファイルは一箇所にするメリットはない

> そして>>703をapplicationContext.xmlに書いたらDIにならないのは何故ですか?
それは話が変わってる。依存関係を一箇所にまとめるメリットがないという話をしている。
依存関係を一箇所にまとめるメリットがないから、DIを使うメリットもないという話

しかし、おかしいな。
> 677 名前:仕様書無しさん[sage] 投稿日:2018/06/25(月) 09:50:30.59
> 設定をコードに散らばらせずに一箇所にまとめるメリットは分かるのに

ここでいう「設定」がDIコンテナのための設定であるならば、
DIコンテナの設定を一箇所のまとめるメリットがあるから、
DIコンテナの設定を一箇所にまとめよう。という事になって、
おいおい、話が循環してるじゃねーかwって事になってしまう。

その流れで行くならそのそも「設定」は一箇所にまとまってないよね
ってことになる

723 :仕様書無しさん:2018/06/26(火) 00:25:53.06 .net
装備に含まれるデータは、半分以上が、日付と製作者・錬金者の情報と思われます。
(こちらにもう少し詳しく書きました。
https://hiroba.dqx.jp/sc/diary/278225439938/view/5325444

初めて装備した時に職人評判が上がるシステムのため、製作者情報は必須ですが、
装備後は必要無い情報ではあります。
フレンドに作ってもらった物は名前を残したいという気持ちはありますが。

提案です。
「装備圧縮袋」
・装備済の物のみ入れる事ができる。
・入れた装備は「装備の履歴」の情報が消える。
・パルプンテや強化した紫文字の情報も(システム的に問題無ければ)消す。

これにより装備品データの約8割が削減されることになるはずです。
10枠の容量で50個の装備が入れられるのです。
ぜひご検討お願いします。


オブジェクト指向プログラミングを知っている人へ。

724 :仕様書無しさん:2018/06/26(火) 00:27:17.57 .net
勝手にDBのドライバの話(>>703)をDBの接続先サーバの話に変えるなよ

725 :仕様書無しさん:2018/06/26(火) 00:28:49.44 .net
>>703の話なら、DIではないです。が答えですね。

726 :仕様書無しさん:2018/06/26(火) 00:33:15.58 .net
DBのドライバをクラス名でapplicationContext.xmlに書くのはDI?

という質問にしてくれればわかりやすい。
「意味不明な質問であること」がわかりやすい

何が意味不明かと言うと、
DIを使うから、applicationContext.xmlに書くのであって
applicationContext.xmlに書くからDIになるのでは無いとういこと。


そもそもの発端は、一箇所にまとめることがメリットであるかどうかという話で、
DBのドライバのクラス名を一箇所に書いておくことにメリットはありません。

727 :726:2018/06/26(火) 00:35:32.87 .net
DBのドライバのクラス名を一箇所に書いておくことにメリットはないので
applicationContext.xmlに書く必要もないということね

何も考えないで言われたことをやってる人は、DI使うのは当たり前、
applicationContext.xmlに書くのが常識。で終わっちゃってるけど
なぜそれが必要か?の理由まで考えると、DIを使わなくていいし
一箇所にまとめる必要もないことに気づくはず

728 :仕様書無しさん:2018/06/26(火) 03:31:30.37 .net
DI否定厨の無駄に長い話をまとめると、
設定ファイルの話は完全敗北で分が悪いから
DIのメリットの有無に話を逸らしたい、だね

729 :仕様書無しさん:2018/06/26(火) 05:28:10.79 .net
DIが本題で設定ファイルの話にすり替えられていたのが
もとに戻ったというところか

730 :仕様書無しさん:2018/06/26(火) 07:14:21.31 .net
設定ファイルについて双方の意見をまとめて
流れがめちゃくちゃで何を言ってるかわからん

731 :仕様書無しさん:2018/06/26(火) 08:17:30.58 .net
結論
DIで書く理由が宗教的なものでしか無いので却下

732 :仕様書無しさん:2018/06/26(火) 09:57:40.95 .net
>>730
設定ファイルについては忘れていいよ。

本来コードの中から分離すべきでないクラス間の依存情報を
設定情報として分離したら(←そもそもこれが間違い)
一箇所にまとめるのはメリットが有ることでしょう。なぜなら
設定情報はメリットがあるから一箇所にまとめてあるんだからという理屈
(↑この理屈も、設定情報は必ずしも一箇所にまとまってるわけじゃないのだからおかしい)

どんなものでも設定情報という扱いにしてしまえば
一箇所にまとめるメリットがある!という暴論になってる

733 :仕様書無しさん:2018/06/26(火) 12:38:53.55 .net
一箇所はねーわ
柔軟性低すぎ

734 :仕様書無しさん:2018/06/26(火) 14:25:18.25 .net
DIを否定する人は、どういう理由で否定してるの?
以下に当てはまる理由はありますか?

(1) クラスAに依存してるコードをクラスA'に書き換えたいとき、DIなら設定してる一箇所を変えるだけで良いと言われてるが、それは事実と異なる

(2) A'に書き換えたいケースなんて存在しない

(3) Aに依存してる全てのコードをA'に書き換えて回る方がコストが安い

735 :仕様書無しさん:2018/06/26(火) 17:51:34.55 .net
設定はブロックチェーンから取得してください

736 :仕様書無しさん:2018/06/26(火) 17:53:41.13 .net
>>734
クラスAを直接書き換える

737 :仕様書無しさん:2018/06/26(火) 19:23:42.90 .net
クラスAに依存してるコードをクラスA'に書き換えたいとき、DIを使わずともnewしている所を一箇所を変えるだけで良い

「一箇所を変えるだけで良い」というのはDI特有の話ではないので、二度と言うな

738 :仕様書無しさん:2018/06/26(火) 19:27:42.00 .net
>>736
確かにね

>>737
DIにユニークな特性じゃなかったら主張しちゃダメってのもよく分からん理屈だが、例えばDIの他では何がある?

739 :仕様書無しさん:2018/06/26(火) 19:48:29.32 .net
>>737
おおっと、完全に誤読してた

>クラスAに依存してるコードをクラスA'に書き換えたいとき、DIを使わずともnewしている所を一箇所を変えるだけで良い

newしてるところを書き換えるということは、Aをnewしてる箇所が100箇所あれば100回書き換えるということね
DIなら100箇所でAが使われてても修正は1箇所だよ

740 :仕様書無しさん:2018/06/26(火) 19:50:32.89 .net
>>738
だからnew。newする場所はコンストラクタでもメソッドでもいいが、
クラスAに依存したコードを、クラスA'に変えるんだろ?
以下のコードを見れば分かる通り、一箇所しか書き換えていない

class My {
 private InterfaceA a;
 public My() {
  a = new A();
 }
 public void method() {
  a.method();
 }
}


class My {
 private InterfaceA a;
 public My() {
  a = new ADash();
 }
 public void method() {
  a.method();
 }
}

741 :仕様書無しさん:2018/06/26(火) 19:52:53.56 .net
>>739
> newしてるところを書き換えるということは、Aをnewしてる箇所が100箇所あれば100回書き換えるということね

プログラミング初めて1ヶ月の初心者か何かですか?
まさかこんなコードかいてんの?

class My {
 public void method1() {
  InterfaceA a = new A();
  a.method();
 }
 public void method2() {
  InterfaceA a = new A();
  a.method();
 }
 public void method3() {
  InterfaceA a = new A();
  a.method();
 }
}

742 :741の続き:2018/06/26(火) 19:54:45.03 .net
こう書けば終わる話。newしてるのは一箇所だけにできる

class My {
 private InterfaceA createA() {
  return new A();
 }
 public void method1() {
  InterfaceA a = createA();
  a.method();
 }
 public void method2() {
  InterfaceA a = createA();
  a.method();
 }
 public void method3() {
  InterfaceA a = createA();
  a.method();
 }
}

743 :仕様書無しさん:2018/06/26(火) 19:57:05.67 .net
>>742
そのcreateAはMyクラス以外でも、Aを必要とするクラス全てで利用するという理解であってますか?

744 :仕様書無しさん:2018/06/26(火) 19:57:20.45 .net
そもそも、DIでは「Aをnewしてる箇所が100箇所」というコードを
書けないという問題があるんだよ。

できるって? まあそうだね(笑)
どういうコードになるか書いてみ。
>>742と同じようなコードになるからさ

745 :仕様書無しさん:2018/06/26(火) 19:58:20.59 .net
>>743
Aを必要とするクラスが複数ある場合、
DIでも「一箇所書き換えるだけ」にはならないってこと
わかってますか?

746 :仕様書無しさん:2018/06/26(火) 20:00:42.81 .net
>>743
具体的に書きますね?

DIを使った場合

クラスMy1がクラスAを使います。
クラスMy2がクラスAを使います。
クラスMy3がクラスAを使います。
クラスMy4がクラスAを使います。
クラスMy5がクラスAを使います。

と5箇所、書かないといけない。
DIでこれを全部A'に書き換える場合


クラスMy1がクラスA'を使います。
クラスMy2がクラスA'を使います。
クラスMy3がクラスA'を使います。
クラスMy4がクラスA'を使います。
クラスMy5がクラスA'を使います。

と5箇所書き換えなければならない

747 :仕様書無しさん:2018/06/26(火) 20:01:32.48 .net
>>745
わかってないのはお前

748 :仕様書無しさん:2018/06/26(火) 20:01:50.99 .net
>>745
つまり貴方の主張は>>734の(1)ですね?

749 :仕様書無しさん:2018/06/26(火) 20:07:22.46 .net
>>748
YES / NO じゃ正確に答えられない

ようするに、DIでn箇所書き換えるなら、DIを使わなくてもn箇所書き換えればいい

DIで1箇所書き換える例を出してきたなら、DIを使わないで1箇所書き換えればいい例を出してやるし、
DIを使わないで100箇所書き換える例を出してきたら、DIを使っても100箇所書き換えることを示してやる

750 :仕様書無しさん:2018/06/26(火) 20:10:21.26 .net
>>749
貴方はDIで1箇所の修正で済む方法は知らないが、もしあるなら別の方法でも実現してみせる、と言っているのですか?
つまり貴方はDIについて無知なのに批判してるということになりますが、それで良いですか?

751 :仕様書無しさん:2018/06/26(火) 20:22:26.23 .net
>>750
DIで1箇所の修正で済む方法を出してきたら、
それと同じ方法がDIを使わなくてもできる。

752 :仕様書無しさん:2018/06/26(火) 20:28:29.95 .net
型情報を潰してるだけだからな
メリットがあったらスゲーよ

インターフェース使ってもいいけど
元の型も容易に取れる仕組みを入れて欲しい

753 :仕様書無しさん:2018/06/26(火) 20:47:39.84 .net
DIは所詮依存情報を外出ししただけに過ぎないんだよ
それ以外の違いは副次的なもので、DIを使ってできるから
使ってみましたと言うだけで、DIを使わなくてもできる

754 :仕様書無しさん:2018/06/26(火) 21:51:50.87 .net
ていうか、ごった煮リストだよね
別にごった煮リストじゃなくてもいいと思うんだけど
ごった煮リスト作っちゃうんだよね

755 :仕様書無しさん:2018/06/27(水) 00:16:24.42 .net
C#やjavaのようなインターフェースや予測入力がしっかりした言語じゃないとDIの意味なくて、phpなんかでDIって言われても「はぁ?」ってなる

756 :仕様書無しさん:2018/06/27(水) 00:22:10.39 .net
>>755
なにを言ってるのかまったくわかりません

757 :仕様書無しさん:2018/06/27(水) 00:51:00.47 .net
>>751
ご自身が無知であることを認めて頂き、誠にありがとうございます。
おかげでDIに対する貴方の意見には何の価値もないことが分かりました。感謝します。

758 :仕様書無しさん:2018/06/27(水) 01:05:04.47 .net
批判してる対象の技術で何ができるか、
それも主題としてる問題に対して何ができるかも知らずに
厚かましくも批判するなんて、
どういう神経してるんですかね?その点は興味深いです。

759 :仕様書無しさん:2018/06/27(水) 01:36:01.64 .net
お前らがやりたいことって
いつも連想配列な気がする

760 :仕様書無しさん:2018/06/27(水) 02:37:48.63 .net
>>757
どういうこと?
今はお前のターンで、DIで1箇所で済む方法を出さなきゃいけないはずなんだが?
まだ?まってるよ?

761 :仕様書無しさん:2018/06/27(水) 06:47:32.09 .net
アンチが何度もマーチンファウラーのやつ貼ってるのに

762 :仕様書無しさん:2018/06/27(水) 08:01:33.47 .net
>>746
これクソわろた
晒し上げとこ
アンチアホすぎでしょw

763 :仕様書無しさん:2018/06/27(水) 08:56:42.44 .net
>>746
www

764 :仕様書無しさん:2018/06/27(水) 17:48:11.81 .net
アンチ本人は崖っぷちで耐えてると勘違いしてるけど
とっくの昔に崖の下に落ちてるパターンw

765 :仕様書無しさん:2018/06/28(木) 12:02:30.78 .net
DIは無意味
普通にnewすればいい
実装の差し替えも簡単にできる

class A {
public void method() { puts "hello" }
}

class B {
public void aaa() {
new A().method();
}

ここでAをA'にしたくなったら
Aをコピペして片方のAをAoriginに改名する
もう片方のAの実装をこう差し替える

class A {
// private Aorigin a = new Aorigin();
private Adash a = new Adash();
public void method() { a.method(); }
}

また気がかわってAoriginに戻したくなったらコメントアウトを切り替えるだけ
Bのほうを直す必要は一切ない

クソみたいなフレームワークを覚える労力はいらない
初心者でもわかるほどシンプルで簡単な実装
頭が悪すぎる巨大な泥だんご設定ファイルはいらない
参照ジャンプが有効なのでデバッグも楽々
仮装テーブル挟まないので速い

766 :仕様書無しさん:2018/06/28(木) 12:15:18.40 .net
>>765
じゃあお前はそれでやってろよ

767 :仕様書無しさん:2018/06/28(木) 12:45:54.37 .net
>>765
わあすごい天才ねあなた

768 :仕様書無しさん:2018/06/28(木) 12:46:41.24 .net
素晴らしいアイデアだ
またDIはゴミと証明された

769 :仕様書無しさん:2018/06/28(木) 16:44:50.73 .net
>>765
デザインパターンとして相応しい名前つけてやるよ

ドカタコメントパターン

770 :仕様書無しさん:2018/06/28(木) 17:05:05.79 .net
ぷっ
pimplだろw

771 :仕様書無しさん:2018/06/28(木) 22:32:03.43 .net
>>765
よく戻って来れたなw

772 :仕様書無しさん:2018/06/29(金) 11:22:15.02 .net
>>765
設定ファイルそんなでかくなる?
差し替えが必要な要素は設定ファイル使うけど、大半のクラスはアノテーションとかメタデータで済ませるし

773 :仕様書無しさん:2018/06/29(金) 12:58:45.70 .net
>>772
覚えたての巨大な泥団子ってワードを使ってみたかっただけだよ
察してあげてよ

774 :仕様書無しさん:2018/06/30(土) 15:43:11.73 .net
>>772
アノテーション使うと一元管理できないですよね?
何に依存するかを、クラスの中に書くことになってしまう

775 :仕様書無しさん:2018/06/30(土) 17:36:47.43 .net
>>774
>何に依存するかを、クラスの中に書くことになってしまう

ならない

776 :仕様書無しさん:2018/06/30(土) 17:41:39.86 .net
>>775
なんで?
ちょっとサンプルコード書いてみてよ

777 :仕様書無しさん:2018/06/30(土) 18:18:18.82 .net
>>776
>>746の時みたいに、DIアンチが圧倒的な無能を晒すまで追い詰めてやってもいいんだが、
結局恥知らずにも戻ってくることが分かったからなぁ

778 :仕様書無しさん:2018/06/30(土) 18:53:22.15 .net
>>773
「巨大な泥団子」ってプログラミング用語だったんか
一つ賢くなったよありがとう

779 :仕様書無しさん:2018/06/30(土) 19:18:52.68 .net
プログラミングっつーか業界用語っつーかスラング?

780 :仕様書無しさん:2018/06/30(土) 19:54:54.57 .net
>>777
いや、いつも追い詰めてないじゃんw
追い詰めたというレス見せてくれよ?

781 :仕様書無しさん:2018/06/30(土) 22:56:54.55 .net
class A {
[ここDIしてね]
private B b ;
}

ってあるとき、bのクラスはBでもいいし、Bのサブクラスでもいいのよ。
そこらへんは設定ファイルとか、外出しする。

782 :仕様書無しさん:2018/06/30(土) 23:14:29.37 .net
>>781
あっ、>>776宛ね

783 :仕様書無しさん:2018/07/01(日) 00:05:12.99 .net
>>781
つまりclass Aはclass Bに依存してるってことですね

784 :仕様書無しさん:2018/07/01(日) 00:06:34.60 .net
>>783
そりゃそうでしょ(笑)
AはBを使いたいんだから

785 :仕様書無しさん:2018/07/01(日) 01:05:46.19 .net
つまり必要なのはDIじゃなくて、
テストの場合にはデフォルトで使用するクラスから
すげ替えることができる機能なのでは?

786 :仕様書無しさん:2018/07/01(日) 01:07:15.00 .net
ここでいってるDIっていうのは
「オブジェクト指向の依存関係を"ひとまとめに"定義する部分」
の話ね。つまりapplicationContext.xmlや
それ相当のコードはいらない

依存関係はクラスそのものに書くべき

787 :仕様書無しさん:2018/07/01(日) 07:23:21.54 .net
その機能を使うと、
void foo(){
var b = new B();
}
の、bの型がB以外のものになるってこと?

じゃなくて、例えばBをダイナミックリンクしてるとして、
そのBで示されるものが本番用の実装だったりテスト用の実装であれば良いってこと?

788 :仕様書無しさん:2018/07/01(日) 08:26:17.20 .net
>>787
何度も言ってるんだがなw

依存関係を外部に外出しするんじゃなくて、
クラスそのものに書いたほうがいい

システムの仕様として実行時に依存するクラスが変わる場合
それは例えばストラテジーパターンのようなパターンであり
それが必要になったときに必要なものを実装すればいい
必要になるかもわからんのに予め依存関係をひとまとめにするようなDIはいらん。

DIは実質テストでモックにすげ替えるだけに使われてる。
というと何故かDI厨がそんなことはない!テストの話をするな!とか
言いがかりつけてくるんだけど、反論はしないんだよなw

アノテーションのように依存関係はそのクラスに書くほうが良い
残るはDIはテストのために使われているってことだけ
だけどモックにすげ替える機能はどの言語でもあるだろ?
だから結局の所DIなんていらん

789 :仕様書無しさん:2018/07/01(日) 09:49:15.65 .net
> DIは実質テストでモックにすげ替えるだけに使われてる。
まあ、これは実質的にはその通りだと思う(100%ではないと思うけど)。
だとして、じゃあ、どうやってすげ替えるか。

> だけどモックにすげ替える機能はどの言語でもあるだろ?
リンカレベルの機能であれば、あるよね。
じゃあ、切り替えるときどうしよう。
makefile書き換えようか?
実行時の環境変数でclassを探すパスを切り替えようか?

依存されるクラスB1, B2, B3があって、下記のような2系統のdllを作ったとしよう。
honban.dll : 本番用
testmock.dll : テスト用
でもテストのときに使いたいのはB1とB2で、B3は本番のままでいいよ。
ってとき、testmock.dllではB1とB2だけ実装したいよね。
でもリンクを切り替えるためにはB3も実装しないといけない。

んじゃあ、B1とB2はtestmock.dllからとってB3はhonban.dllからとるよ。
ってことができればいいんだけど....


> DIは実質テストでモックにすげ替えるだけに使われてる。
あと、まあデータストアを切り替えるときとか、使うよね。
(データの保存をRDBにしたり、ファイルにしたり...)

こういう例がちょくちょく出てくると、その都度実装するにしても、
結局「じゃあ、フィールドやプロパティにアノテーションつけて切り替えられるところを明示する?」とか
「そこに値を入れるんだったら、コンストラクタでやるのが自然だよね」とかになり、
結果DIになります。 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)


790 :仕様書無しさん:2018/07/01(日) 10:01:55.23 .net
ストラテジーでやるにしても、
そのストラテジーをどうやって切り替えるか?
テストときとそうでないときで、ふるまいを変えるストラテジーが必要になります。
そのストラテジーは、たぶんインスタンスの管理をやるでしょう。

DIです。

791 :仕様書無しさん:2018/07/01(日) 10:12:36.52 .net
まあ「本質的にDIが嫌い」なのか「DIはともかく、何でもかんでも適用すりゃいいってもんじゃない」なのか、
ってのはありますな。
>>788は後者に思える。

792 :仕様書無しさん:2018/07/01(日) 10:15:54.61 .net
いまどきのDIはどっちかというとオブジェクトのライフサイクル管理が主目的
テストでモックを使うときはいちいちDIしないでモッキングフレームワークを使う

793 :仕様書無しさん:2018/07/01(日) 10:24:49.05 .net
狭い視野で大発見して「これすげぇ、これ無駄、みんなこうしようぜ」ってはしゃぐ子いるよね。
部分最適しか見てない善意の提案に対して、先輩とかリーダーとか誰かがコラって言ってあげないと、プロジェクト滅茶苦茶にされちゃうぜ。

794 :仕様書無しさん:2018/07/01(日) 11:07:24.98 .net
>>788
現実が見えないお方ですね

795 :仕様書無しさん:2018/07/01(日) 11:11:18.01 .net
>>793
そういうやつのほうが、「黙って従う」タイプよりもずっと有望だがな。

796 :仕様書無しさん:2018/07/01(日) 11:59:19.08 .net
>>790
> ストラテジーでやるにしても、
> そのストラテジーをどうやって切り替えるか?

実行時になにかのパラメーターを使って切り替えればいいだけだよ。

DIは実行時に切り替えられないので使えない
DIは起動時の初期設定で決定してしまえば
実行中に帰ることはできない

797 :仕様書無しさん:2018/07/01(日) 12:50:03.58 .net
>>796
だれが誰にそのパラメータをわたすの?

798 :仕様書無しさん:2018/07/01(日) 12:54:28.74 .net
実行時にDIするオブジェクトが変えられない?
それ別に本質じゃない。
それで十分だからそう実装されてるにすぎないよ。
というか、あなたの主張はDI派のそれとほぼ一致するわ。
あなたもDIを要している。

799 :仕様書無しさん:2018/07/01(日) 13:24:39.37 .net
別にいまどきのIDEにはリファクタリング機能として
変数名やクラス名なんかをまとめて変更する機能が付いてるから、
べつに1箇所に記述する必要もクソも無いんだがなぁ。

800 :仕様書無しさん:2018/07/01(日) 13:37:54.79 .net
>>799
たとえばストレージを変えるたびにクラス名の置換とかしてるとか、ヤダわ。

801 :仕様書無しさん:2018/07/01(日) 13:38:38.94 .net
「クライアントクラスの中で直接サービスクラスをnewするのではなく外部から渡しましょう」がDIなんだから難しく考える必要ないよな

802 :仕様書無しさん:2018/07/01(日) 13:51:41.67 .net
>>800
え?
ストレージ変更なんかディレクトリ指定変えれば済むだろ?
クラス構成に影響あんのか?

803 :仕様書無しさん:2018/07/01(日) 13:52:53.70 .net
違う世界に住んでる感

804 :仕様書無しさん:2018/07/01(日) 14:04:20.31 .net
まさか、ストレージクラスが特定のデバイスしか扱えないとかアホな作りにしてるって事?
まさかデバイスドライバー直叩きなクラスとか?
…なんかDI必要って言ってる人って、システム構成からして汎用性考えて無いだけ?

805 :仕様書無しさん:2018/07/01(日) 14:05:44.08 .net
そもそも外からクラス指定を変更する理由が無いし。

806 :仕様書無しさん:2018/07/01(日) 14:14:48.68 .net
話が食い違ってるのに、“ストレージ” が指しているものがズレてることに気づけないのかな
なんか、DIとかそれ以前の問題だね

807 :仕様書無しさん:2018/07/01(日) 14:17:34.25 .net
ストレージって、保存先をディスクにしたり
SQL経由でデータベースに、とかそういうことよ?

808 :仕様書無しさん:2018/07/01(日) 15:21:24.76 .net
>>807
そんなん、そう言うストレージクラス作ってそっちで切り替えてしまえば良かろうが。
なんでメインをいじったり、全体を再コンパイルする必要があるんだよ。

809 :仕様書無しさん:2018/07/01(日) 15:25:06.29 .net
ちょっとストレージ変えたんで、システム全コンパイルしてください。


俺がチームリーダーなら張り倒すわw

810 :仕様書無しさん:2018/07/01(日) 16:46:02.38 .net
C#とかコンパイル早いので別に

811 :仕様書無しさん:2018/07/01(日) 17:03:35.41 .net
>>797
> だれが誰にそのパラメータをわたすの?

アプリのユーザーだろ。
例えば、ユーザーが拡大・縮小アルゴリズムとして
バイキュービックを選んだら、バイキュービックで処理する

DIはユーザーが選択するものじゃなくて
開発者がどのモジュールに依存するかを決め打ちするものだから
アプリのユーザーの選択で変わるようなことには使えない

812 :仕様書無しさん:2018/07/01(日) 17:05:14.56 .net
>>798
> 実行時にDIするオブジェクトが変えられない?

DIパターンはそういうものだからね。

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

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

あんたは単に、インスタンスを値として他のインスタンスに渡すことを
DIという間違った名前で読んでいるだけ

813 :仕様書無しさん:2018/07/01(日) 18:36:25.79 .net
>>809
なぜ?

814 :仕様書無しさん:2018/07/01(日) 18:56:28.21 .net
>>813
> >>809
> なぜ?
全ユニット再テストしなきゃならんだろ。

815 :仕様書無しさん:2018/07/01(日) 19:34:37.78 .net
>>814
なぜ?

816 :仕様書無しさん:2018/07/01(日) 19:52:10.50 .net
変更が掛かった箇所は再テスト。
それが分からない奴は工学学び直せ。

817 :仕様書無しさん:2018/07/01(日) 20:43:11.04 .net
>>814
インフラが変わってユニットテスト?やるべきは統合テストでは?

818 :仕様書無しさん:2018/07/01(日) 23:03:44.11 .net
>>817
インフラ扱う部分だけ変化してるなら、インフラ部分と統合テストでいいかもな。
全オブジェクトが書き換わるならユニットテストしなきゃならんだろ?

819 :仕様書無しさん:2018/07/02(月) 00:23:10.62 .net
>>818
は?そんなプログラム書くやついねーだろアホ?

820 :仕様書無しさん:2018/07/02(月) 02:58:30.46 .net
>>818
ポチッとテストケース流すだけじゃね?

821 :仕様書無しさん:2018/07/02(月) 10:59:35.89 .net
小規模開発しか経験した事無い奴らしか居ないから、何社も関わって作る規模のプロジェクトに対して全コンパイル指示する大変さが分からないんだろうなぁ

822 :仕様書無しさん:2018/07/02(月) 12:37:34.04 .net
>>821
教えて?

823 :仕様書無しさん:2018/07/02(月) 15:23:34.27 .net
>>822
まず、A社に対してコンパイル&納品依頼書を提出するんだよ
そして双方のお偉いさんにハンコをもらって作業して納品してもらう
どんなに早くても2日はかかる
っていうのが関連会社の分だけ必要になる

824 :仕様書無しさん:2018/07/02(月) 16:34:05.11 .net
コンパイル、リリースする度バージョン管理の記録もしなきゃなあ

825 :仕様書無しさん:2018/07/02(月) 18:43:15.44 .net
はぁ?なんで触ってないとこまでコンパイルする必要あんの?
もう管理がおかしいじゃん
どこ直しても全コンパイル必須なんだろ?
スタンス関係ねーじゃん

826 :仕様書無しさん:2018/07/02(月) 18:45:54.27 .net
1つの実行ファイルである必要もないだろうし
一体なぜ全部つなげるのか?

827 :仕様書無しさん:2018/07/02(月) 18:47:18.26 .net
.netframeworkのdllまでビルドせんでもええんやで

828 :仕様書無しさん:2018/07/02(月) 22:36:23.42 .net
そもそも>>799とかがIDEのリファクタリング機能で云々とかいってるから「全コンパイル」とかそういう話になってるんだろ。
そして>>826。確かにその通りで、しかしそのためには依存性がなくなっている必要があるのだよ。
そのために使うのがDI。
※これはDI(DIコンテナを使ってやるDIパターン)だけが実現の手段ってわけじゃないし、
 これだけがDIの有用性を示しているというわけではないよ。

829 :仕様書無しさん:2018/07/02(月) 22:42:47.37 .net
べつにDIなんてしなくても機能のスイッチなんて簡単に出来るんだよな。
しかもメインを書き換える必要すら無く。
だいたい出力先や出力書式の変更なんて出力モジュールだけ弄ればいいんであって、
個々の方式毎に扱うクラスごと切り替えるなんてするなよ。

830 :仕様書無しさん:2018/07/02(月) 22:45:24.88 .net
洋服着替えるだけなのに血液型から変える必要は無いんだよな。

831 :仕様書無しさん:2018/07/02(月) 23:50:51.92 .net
●DI側
private ストレージ; // ←DIされるポイント
void update(int id, string newName) {
var なんかデータ = ストレージ.GetById(id);
なんかデータ.Name = newName;
ストレージ.Update(なんかデータ);
}
configファイル
ストレージはストレージforMySQL


●非DI側
private ストレージ = new ストレージForMySQL();
void update(int id, string newName) {
var なんかデータ = ストレージ.GetById(id);
なんかデータ.Name = newName;
ストレージ.Update(なんかデータ);
}

832 :仕様書無しさん:2018/07/02(月) 23:50:57.08 .net
で、ポスグレに対応しなきゃならなくなったら

DIのほうは
update()関数のほうはそのままで, configをいじる。(もちろんストレージforポスグレは作る)
config
ストレージはストレージforポスグレ

DIじゃないほうは、インスタンス作るとこを書き換える?
private ストレージ = new ストレージForポスグレ();

あるいはストレージをポスグレ対応にして、ストレージのほうは作成しなおして
private ストレージ = new ストレージ("ポスグレ");

ストレージがコンフィグを読むようにして
private ストレージ = new ストレージ();// ←中でコンフィグ読む
ってなるのかな。

出力先・出力書式の方式よってクラスを分けないってことは、
>>829のコードは、ストレージクラスのメソッドの先頭でポスグレ用・MySQL用で毎回分岐するのかな。

833 :仕様書無しさん:2018/07/02(月) 23:52:59.08 .net
>>830
その通り。
そのためには洋服が肉体に食い込まないようにしないといけないよね。
※まあ、肉体に食い込んでたとしても血液型を変える必要はないんだけど。

834 :仕様書無しさん:2018/07/03(火) 00:02:50.79 .net
だから、ダイレクトに固有の機能クラス呼び出しなんかしないんだよ。なーんで非DIがダイレクトにSQL呼ぶんだよw
もっと抽象クラスを呼び出す形にするのが普通だろ。
固有の機能差はその抽象クラスから下で吸収するから、そもそもメインで読んでるクラスを書き換える必要は無いんだよ。

835 :仕様書無しさん:2018/07/03(火) 00:15:21.12 .net
>>834
抽象クラスのインスタンスを作るのは誰なんですかね?

836 :仕様書無しさん:2018/07/03(火) 00:16:19.63 .net
>>835
抽象クラスを継承している具象クラスのインスタンス、の意

837 :仕様書無しさん:2018/07/03(火) 20:28:53.65 .net
障害報告はスカスカのエビデンスで上がってくる
少ない情報を頼りに障害を再現しなきゃならん
現実的な方法はプロダクション環境を丸ごと再現して動かすしかない
そうなるとDIはほとんど役に立たん
プロダクションのDBを効率よく複製する方法を考えるほうが有益

838 :仕様書無しさん:2018/07/03(火) 20:55:37.04 .net
>>837
いや、大切なのはうまい飯を食い、愛する人と穏やかに暮らすことだよ。
プロダクションDBの復元なんて、なんの意味もないよ。

839 :仕様書無しさん:2018/07/03(火) 20:58:08.88 .net
まあ、DB絡みのバグなんて本番環境じゃないと再現出来ないものばかりだしな。

840 :仕様書無しさん:2018/07/03(火) 21:01:40.22 .net
DIって障害対応のためのものだったのか…?

841 :仕様書無しさん:2018/07/03(火) 21:06:20.45 .net
DB設計の不備とかORMが作りやすさや使い勝手や運用面のことなにも考慮してないとかその辺の領域じゃないのか?

842 :仕様書無しさん:2018/07/03(火) 21:09:05.67 .net
まあ、オブジェクト指向のくせに限定的なクラスをダイレクトに使う奴にしか有用じゃ無い技法だやな。

843 :仕様書無しさん:2018/07/03(火) 22:04:47.52 .net
>>842
>>835
答えて欲しいんだが…まあ、無理にとは言わないが。

844 :仕様書無しさん:2018/07/03(火) 22:08:49.30 .net
ログからモックを作るんだよ
インシデント調査に便利だぞ

845 :仕様書無しさん:2018/07/04(水) 07:27:47.56 .net
>>843
無理
理由はドカタだから

846 :仕様書無しさん:2018/07/04(水) 07:55:21.17 .net
DIすると自然とSOLIDな設計になんだよね
テスタビリティもそうだけど設計ガイドラインとしての価値が大きい

847 :仕様書無しさん:2018/07/04(水) 09:49:53.10 .net
>>843
スタティックなcreate関数でも作って自身に内包じゃね?
どうせDBアクセスクラスなんてシングルトンなんだし。

848 :仕様書無しさん:2018/07/04(水) 10:23:22.82 .net
>>847
シングルトンだと!?

849 :仕様書無しさん:2018/07/04(水) 11:45:58.21 .net
まあそうじゃね?

850 :仕様書無しさん:2018/07/04(水) 12:10:28.15 .net
シングルトン万能

851 :仕様書無しさん:2018/07/04(水) 12:36:55.25 .net
>>847
適切なスコープでdisposeしないの?

852 :仕様書無しさん:2018/07/04(水) 13:28:47.97 .net
並列処理やマルチスレッドや手動スレー指定があるならスコープ関係あるだろうけど、そうでなけりゃ接続クラス自体はグローバルで唯一じゃね?

853 :仕様書無しさん:2018/07/04(水) 14:26:14.92 .net
マルチで繋げてもどうせどちらかが待たされるんだから一本化しちゃえよ。

854 :仕様書無しさん:2018/07/04(水) 18:43:05.49 .net
>>852
冗談きついね

855 :仕様書無しさん:2018/07/04(水) 19:08:01.79 .net
>>846
> DIすると自然とSOLIDな設計になんだよね

残念ながらならない。
どんな汚いコードでもDIを使うことはできるから
銀の弾丸に信じてる時点でアウトだな

856 :仕様書無しさん:2018/07/04(水) 19:29:08.56 .net
>>855
ま、何事にも例外はある
君にはもしかすると難しいのかもね

857 :仕様書無しさん:2018/07/04(水) 19:47:39.49 .net
>>856
うん。反論はしないってことでいいね?

858 :仕様書無しさん:2018/07/04(水) 19:53:40.50 .net
モジュールちゃんと分けてるか?
プロジェクト構成ファイルの所有者を管理者にしてパッケージを追加できないようにするんだ
こうしておけば余計な処理が紛れ込まなくなる

例えばリポジトリの実装モジュールにはプレゼンテーションのパッケージを参照させないみたいな感じな
プレゼンテーションのパッケージを参照してないとプレゼンテーション処理を書いたらエラーになる
だからこのモジュールは自然とデータアクセスの処理だけになるんだ

DIを使うとこういう風に自然とモジュールが分かれるからGoodなんだよ

859 :仕様書無しさん:2018/07/04(水) 19:56:04.40 .net
>>857
いいよ
どうでも

860 :仕様書無しさん:2018/07/04(水) 20:21:56.61 .net
どうでもいいなら、DI使ったからって
きれいになるわけじゃないよって
言ってくれませんかね?
本当のことだし

861 :仕様書無しさん:2018/07/04(水) 20:23:14.24 .net
>>858
自然と分かれるという理屈が書いてない
根拠が無いので信頼性がまったくない

862 :仕様書無しさん:2018/07/04(水) 20:24:50.24 .net
例えば神クラスを作って、
すべてのクラスは神クラスをDIで
インジェクション使う。
開発規約にそうしなさいと書いてある

こういうのが綺麗なコードだよ

863 :仕様書無しさん:2018/07/04(水) 20:25:35.32 .net
間違ったw

例えば神クラスを作って、
すべてのクラスは神クラスをDIで
インジェクションする。
開発規約にそうしなさいと書いてある

こういうのが綺麗なコードだよ

864 :仕様書無しさん:2018/07/04(水) 20:30:10.68 .net
全部どこから使う時もcreate関数呼んで、同じ相手なら前と同じインスタンス返して、新しい相手なら新しいインスタンス返す様にすればいいじゃん。

865 :864:2018/07/04(水) 20:33:28.01 .net
設計的にも疎結合に出来るし、インスタンスを引き回す必要も無くなるんだから、楽だろ?

866 :仕様書無しさん:2018/07/04(水) 20:54:48.66 .net
まDIなんて必要なったときに
部分的に使えばいいんだよ。
それをDIって言わないんだけどなw

867 :仕様書無しさん:2018/07/04(水) 20:55:54.43 .net
 DIとは?・・・オブジェクト指向の依存関係を"ひとまとめに"定義する部分と、それを利用するために
        オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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

868 :仕様書無しさん:2018/07/04(水) 21:00:08.95 .net
>>860
どうでもいいけど、DI使うと設計が綺麗になりますね
例外も有ります
それだけ
ほんとどうでもいいです

869 :仕様書無しさん:2018/07/04(水) 21:01:24.42 .net
> どうでもいいけど、DI使うと設計が綺麗になりますね

残念ながらDI使わない状態で綺麗な設計ができない人が
DI使ったからって綺麗な設計にはならないんだよ

870 :仕様書無しさん:2018/07/04(水) 21:04:30.74 .net
まあそういう例外もいますね

871 :仕様書無しさん:2018/07/04(水) 21:08:07.29 .net
へーいるんだw

872 :仕様書無しさん:2018/07/04(水) 21:08:46.30 .net
例えばこういう人かな

例えば神クラスを作って、
すべてのクラスは神クラスをDIで
インジェクションする。
開発規約にそうしなさいと書いてある

こういうのが綺麗なコードだよ

873 :仕様書無しさん:2018/07/04(水) 21:10:06.91 .net
このスレ見てて、DIにする理由を理解してない人が
すごく多いってわかった。
誰もDIのメリットを答えられない

874 :仕様書無しさん:2018/07/04(水) 21:11:31.12 .net
>>871
いますねぇw

875 :仕様書無しさん:2018/07/04(水) 21:13:52.46 .net
そうそうDI使っててもわかってない人いるいる
銀の弾丸じゃあるまいし、DI使っただけで
綺麗になるとかありえない

876 :仕様書無しさん:2018/07/04(水) 21:14:53.92 .net
>>875
全くそのとおりですねぇw

877 :仕様書無しさん:2018/07/04(水) 21:18:00.35 .net
何も理解せずに仕事で前のコードがこうなってたから
DIやってますって人も多いだろうね

878 :仕様書無しさん:2018/07/04(水) 21:18:37.30 .net
>>877
ありがちですね

879 :仕様書無しさん:2018/07/04(水) 21:20:57.37 .net
綺麗な設計にするならフレームワークのほうが重要かな
用意された枠組みを真似て、それにそったコードを書けばいいから自然と綺麗になる
フレームワークの方でどんなクラスを作るかってのが決まってるからね

単にDIだと何をクラスにするか自由だから
それだけじゃ綺麗になったりしない

880 :仕様書無しさん:2018/07/04(水) 21:27:34.82 .net
>>879
俺もそう思う

881 :仕様書無しさん:2018/07/04(水) 22:56:03.99 .net
>>879
フレームワークとDIって排他的ではないし、
きれいになり方も違うからねえ。

882 :仕様書無しさん:2018/07/04(水) 23:36:23.41 .net
フレームワークいいけど
フレームワークの上で作成したクラスは問答無用で全部他で使えないゴミになる
フレームワークのキャパを容易に上回るようなものを作るとき
フレームワークはタダひたすらにゴミである

883 :仕様書無しさん:2018/07/04(水) 23:44:43.28 .net
>>882
そりゃそうだ

884 :仕様書無しさん:2018/07/05(木) 00:05:04.47 .net
>>883
おかしくないか?
小さく単純なものを組み合わせて
大きく複雑なものを作ってきたのに
それができなくなっちゃうのはなんでなの?

885 :仕様書無しさん:2018/07/05(木) 02:09:59.72 .net
>>884
フレームワークの機能を使ってるからだろ?
DI使っていたってフレームワークの機能を使ったら
同じことになるじゃん

886 :仕様書無しさん:2018/07/05(木) 07:12:01.13 .net
>>866
どうして?

887 :仕様書無しさん:2018/07/05(木) 09:50:36.16 .net
フレームワークのキャパを超えるって意味不明。
それは単にマシンスペックに余るってだけじゃね?

888 :仕様書無しさん:2018/07/05(木) 12:10:23.59 .net
オブジェクトをコンポーネントとして扱える価値もわからないガイジが多いね

889 :仕様書無しさん:2018/07/05(木) 12:51:32.91 .net
>>884
意図がまったく読めん。俺もまだエスパー力が足りない

890 :仕様書無しさん:2018/07/05(木) 22:15:29.08 .net
俺の職場はフレームワークを脱却したがっているができていない
なぜかJDBCをラップして代替する機能がフレームワークについてて
底のほうまで浸食されてるせいだ

客を囲い込んで商売する連中が作ってるんだから
オブジェクト指向の理想なんてうわべだけになるのは当然

891 :仕様書無しさん:2018/07/05(木) 22:26:11.74 .net
ラップしてくれてるなら乗り換え簡単だね
ラッパーを別の基盤で実装すればビジネスロジックやプレゼンテーションはそのまま再利用できる
すごく理想的な状況だ
前任者に感謝しないとな

892 :仕様書無しさん:2018/07/05(木) 22:50:57.26 .net
ラッパー作れるだけの能力とマンパワーが無いんだろw
せっかく乗り換え易い様にしてくれた前任者の苦労が水の泡ww

893 :仕様書無しさん:2018/07/05(木) 22:52:07.32 .net
???
そのラッパーがフレームワーク固有だから困ってるって話なんだが
JDBC使ってたらまだなんとかなるのに

894 :仕様書無しさん:2018/07/05(木) 23:00:33.62 .net
前任者がかわいそうだな

895 :仕様書無しさん:2018/07/05(木) 23:13:08.12 .net
どうしろってんだよ知ったげハゲめ
同じラッパー別のフレームワークで実装しろってのか

896 :仕様書無しさん:2018/07/05(木) 23:30:17.77 .net
class FooDao {
public List<Foo> getFooList(...) {
// jdbcつかった実装
}

class FooDao {
public List<Foo> getFooList(...) {
// 他のつかった実装
}

こうするだけじゃん
JDBC直接使ってたらシステム全体に修正が入ってたぞ 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)


897 :仕様書無しさん:2018/07/05(木) 23:35:01.11 .net
ちがう
JDBCをべつのにしたいんじゃない
SQLやJDBC含めたビジネスロジックをそのままにして
その上のフレームワークをやめたいんだ

898 :仕様書無しさん:2018/07/05(木) 23:48:26.52 .net
SQLやJDBCを含めたビジネスロジック?
ちょっと意味がわからんよ

899 :仕様書無しさん:2018/07/06(金) 00:03:50.92 .net
え?おれなんか間違った言葉使ってるか?

900 :仕様書無しさん:2018/07/06(金) 00:32:52.97 .net
>>896
・同一ソリューション(とか、ワークスペースとか)に共存させられないので、開発面倒じゃない?
・実行時のクラス検索システムで先に見つかったほうが使用されるんだよね?ちょっと心配じゃない?
・Javadocとかが集約したドキュメンテーションコメントが、どういう風に見えるんだろう。

この3点が疑問だが、でもそれ以外はうまくいくのか...な?
その方式って、実際に出荷している製品でやったことあるのか教えてくれると嬉しい。

901 :仕様書無しさん:2018/07/06(金) 03:14:59.94 .net
>>891
> ラップしてくれてるなら乗り換え簡単だね

ラッパーっていうのは最悪なものだぞ
ほとんどアンチパターンであるといっても過言じゃない

まずラッパーを使うと直で使うよりもできることが減る
直で使うのと同じことができるものを作る余裕が無いからだ
マイナーな機能まで対応する力はなが、そういうものに限って必要になる

ラッパーを使うことで簡単にかけるという謳い文句をするやつがいるが
信用してはいけない。簡単なことしかできないだけだから。
簡単に書きたいなら、簡単にかけるユーティリティライブラリを作ればいい
違いは、ユーティリティライブラリは、直で使ってもいいし、
ユーティリティを使ってもいいし組み合わせて使ってもいいものだが、
ラッパーは「このラッパー経由で使え。直で使うことは許さん」となっている

あと細かい点として、ラッパーを使うとパフォーマンスが下がる

ラッパーが有効なのは2つの異なった技術を同じように見せたい場合
例えば、DirectXとOpenGLの違いを吸収するもの
もう一つは古いライブラリを新しいライブラリに置き換えるためのヘルパー
Polyfillとも呼ばれる。これは古いコードが不要になればPolyfillも必要なくなる

「馬鹿でも簡単に使える」というラッパーはアンチパターン

902 :仕様書無しさん:2018/07/06(金) 03:23:31.55 .net
>>893
> そのラッパーがフレームワーク固有だから困ってるって話なんだが
> JDBC使ってたらまだなんとかなるのに

フレームワークを脱却するための正しいやり方は、
別のフレームワークを使うラッパーを作ることではない。
そんなことをすると死ぬぞ

なぜなら、古いフレームワーク前提で作られたラッパーと
同等の機能を持つラッパーを作ろうと思ったら、
便利な機能を持ってる新しいフレームワークを使う意味がなくなるし
また新しいフレームワークの機能を使って、古いフレームワークで
実現していたことを作り込まなければいけない。大変すぎる作業。


フレームワーク脱却でも脱却しない場合でも同じなんだが、
フレームワークに依存したコードを減らしていくのが正しい対応。
もちろんラッパーに依存したコードも減らす

汎用的なライブラリ(もちろんフレームワークの機能を使ってない)を
使って、フレームワークに依存した長ったらしいコードを短くしていく
フレームワークそのものは辞める必要はない。だって便利なものなんだから。

重要なのはフレームワークべったりなコード(ラッパー含む)を減らして分離すること

903 :仕様書無しさん:2018/07/06(金) 05:40:15.88 .net
>>900
今は実装を載せ替えるって話をしている
共存できるかと聞かれても、そもそも共存しないから問題ないよ、としか言えんな
FooDaoをダイレクトに書き換えるなら共存しないでしょ

もちろん丁寧に作業するなら
FooDaoからインターフェースを抽出
FooDao : IFooDaoに置換
NewFooDao : IFooDaoを製造
FooDaoのインスタンス化してる箇所をNewFooDaoのインスタンス化に置換
テスト
というステップを踏んだほうがいいし
俺だったらそうする

904 :仕様書無しさん:2018/07/06(金) 06:01:26.30 .net
>>903
ちゃんとリファクタリングの手順を勉強したほうがいいぞ

その丁寧な作業とやらは作業の手順になっていない。ただ構造を変えただけだ
インターフェースという余計な構造が追加されただけ
肝心の処理を置き換え部分が、単なるクラスの再実装になってる。

適切なやり方はこうだ

FooDaoとは別にNewFooDaoクラスを作る
FooDaoインスタンスの中に、NewFooDaoインスタンスを内包させる
FooDaoインスタンスの中の特定メソッドをNewFooDaoに移譲させる
繰り返してすべてのメソッドをNewFooDaoに移譲させる
最終的にFooDaoは何も処理をせず、単にNewFooDaoを呼び出すだけのコードになる
ここまでテストは一切変える必要はないので、変更でミスしてないことが証明される

FooDaoを呼び出しているコードをNewFooDaoを直接呼び出すように変更していく
最終的にFooDaoを呼び出しているコードはなくなるので、FooDaoを削除することができる

905 :仕様書無しさん:2018/07/06(金) 06:07:36.29 .net
>>901
>>891
>> ラップしてくれてるなら乗り換え簡単だね

>ラッパーっていうのは最悪なものだぞ
>ほとんどアンチパターンであるといっても過言じゃない

>まずラッパーを使うと直で使うよりもできることが減る

ラッパーにも種類がある

テスタビリティ確保のためにapiをほぼ完全に再現した極薄のラッパー
この種類のラッパーは出来ることはほぼ同じ

他のapiをラップして使いやすくするためのラッパーもある
このラッパーは意図的に出来ることを減らすことが多い
開発生産性を上げるためには複雑で汎用性の高いAPIよりシンプルで簡単だけどマイナーな機能が使えないかもしれないラッパーのほうが優れているということだ

アダプタやプロクシ、その他様々なデザインパターンの実装として使うラッパーも多々ある

>直で使うのと同じことができるものを作る余裕が無いからだ

前述の通り目的によって同じことが出来るラッパーとそうでないラッパーがあってそれらは使い分けるものだ

>マイナーな機能まで対応する力はなが、そういうものに限って必要になる

必要になるならラッパーを拡張するだけ
オブジェクト指向の基礎だよこれは

906 :仕様書無しさん:2018/07/06(金) 06:09:19.44 .net
>ラッパーを使うことで簡単にかけるという謳い文句をするやつがいるが
>信用してはいけない。簡単なことしかできないだけだから。
>簡単に書きたいなら、簡単にかけるユーティリティライブラリを作ればいい
>違いは、ユーティリティライブラリは、直で使ってもいいし、
>ユーティリティを使ってもいいし組み合わせて使ってもいいものだが、
>ラッパーは「このラッパー経由で使え。直で使うことは許さん」となっている

使わなくてもいいというのはデメリットになりうる
apiにバグがあった場合やapiの使い方を間違えた場合にコードを広範囲に見直さなければならない
ラッパーを経由して使えばラッパーを直すだけでいい

>あと細かい点として、ラッパーを使うとパフォーマンスが下がる

業務に支障が出るようなパフォーマンス低下にはならない
というか体感できない程度だろう

>ラッパーが有効なのは2つの異なった技術を同じように見せたい場合
>例えば、DirectXとOpenGLの違いを吸収するもの
>もう一つは古いライブラリを新しいライブラリに置き換えるためのヘルパー
>Polyfillとも呼ばれる。これは古いコードが不要になればPolyfillも必要なくなる

>「馬鹿でも簡単に使える」というラッパーはアンチパターン

馬鹿でも簡単に使えるのはどうみてもメリットだし
君が言うようにラッパーには他にも様々なメリットがある
バカが居ない現場でも積極的に採用したいね

907 :仕様書無しさん:2018/07/06(金) 06:13:04.15 .net
>>905
だからラッパーは作るな
お前が言ってるそれは、ラッパーではなく簡単なヘルパークラスで解決すべき問題
ラップして必要な機能を覆い隠すとかアホだし、逆に必要な機能をどんどん追加していって
ラップしないクラスと同じものを作り出してどうするんだって話だ
ラッパーを作るのは無駄な作業でしかない

908 :仕様書無しさん:2018/07/06(金) 06:13:32.13 .net
>>902
フレーム使用部分をラップして置き換え可能な状態を作るんだよ

そしてラッパーで旧フレームワークと同等の機能を再現する必要はない
粒度というものを少しは考えろ

909 :仕様書無しさん:2018/07/06(金) 06:15:26.10 .net
> フレーム使用部分をラップして置き換え可能な状態を作るんだよ

それは最悪の方法
時間をかけて使いづらくするだけ
そして新たなオレオレクラスができあがり
将来に渡ってその使いづらいオレオレクラスを
使いづつけななきゃならなくなる

フレームワークに依存するよりも
独自のフレームワークもどきに依存させるほうが
もっと悪い結果になる

910 :仕様書無しさん:2018/07/06(金) 06:18:50.84 .net
>>904
お前がファウラー好きなのはわかったがまずはレスを読めよ
今はリファクタリングの話なんて誰もしてねえよお前以外はな
FooDaoが依存してる基盤を別の基盤に差し替えたいって問題を議論してんの
単なるクラスの再実装をしたいんですけどどうすればいいですか?って問題だ

911 :仕様書無しさん:2018/07/06(金) 06:25:41.99 .net
>>907
わからん子だねぇ
簡単なヘルパーだと使わないという選択肢が生まれて管理が行き届かないんだよ
ホビープログラミングじゃないんだぜ?
みんながこれ系の処理はこのラッパークラス経由で使って統制をとりましょうって時に
お前だけ生のライブラリ使ったら大迷惑なんだよ
お前が書いた生コードの保守は誰がするんだ?
ラッパーのメンテナーはお前の書いたきたねえコードの面倒なんざ見たくねえんだよ

912 :仕様書無しさん:2018/07/06(金) 06:28:25.03 .net
>>909
置き換え可能なラッパーなら置き換え後にリファクタリングもできるってことに気が付かないのか?
まあライブラリ生で使うような素人じゃ経験ないからわからんか

913 :仕様書無しさん:2018/07/06(金) 06:37:39.28 .net
だいたいユーティリティ系クラスってのは
汎用性を犠牲にしないで便利な機能を提供したいライブラリメーカー側の都合が大きいんだよ
ApacheのStringUtilのようなライブラリがそれな
全てのStringをラップして使えなんてバカはいねーしこれはこれで良いんだ

今問題になってるのはそういうのじゃねえ
世界中のユーザーが使うライブラリじゃなくスコープの決まったシステム内で使うためのラッパー話だ
しかも文字列みたいなコアな部分じゃなくデータアクセスみたいなインフラへの依存やフレームワークみたいに特殊なライブラリに依存するものの話だ
大きすぎ汎用性は無秩序なコードを生む原因になるし、汎用性のために利用のための手続きが増えるから生産性も悪い
今作ってるシステムが必要とする機能だけをよりシンプルなインターフェースで提供したほうがいい

世界中のユーザーが使うライブラリには汎用性をもたせ出来ることを増やしていく
スコープの決まったシステムで使うライブラリは出来ることをを制限して単純なインターフェースを手に入れる
これが大事なんだよ

914 :仕様書無しさん:2018/07/06(金) 10:31:50.93 .net
>>910
丁寧な作業と言ってる内容が
全然丁寧な作業になってないから言ってるんだろ

どうせインターフェース抽出する目的は
なんだって聞いて答えられないだろ

形を整えれば丁寧な作業だって勘違いしてる。
例えば作文を書く時、マス目にきっちり文字を入れれば
丁寧な作業だ。みたいなそんな発想なんだよ

915 :仕様書無しさん:2018/07/06(金) 10:33:46.64 .net
>>911
だから「よく設計されたライブラリを使って統制を取りましょう」でいいだろ。
なんで片手間に作られたオレオレラッパーで統制が取れると思ってんだ?

現時点でクソなラッパー使わされて問題になってるから、
ラッパー取り払いたいってなってる事実が理解できないのか?

916 :仕様書無しさん:2018/07/06(金) 10:56:32.51 .net
>>914
テストのためだよ
そんなこともわからんの?

917 :仕様書無しさん:2018/07/06(金) 11:00:47.82 .net
>>915
基本を理解してないな
プログラムが成長して既存のコードが使いにくくなることはある
これはラッパーだろうがヘルパーだろうが同じこと

この場合はラッパーだからこの程度で済んでいたが
ヘルパーだったら不満があるところをシステム全部から探して検討して修正して個別にテストしなければならなかった
ラッパーでリスクを最小化してくれた前任者に感謝しなさい

918 :仕様書無しさん:2018/07/06(金) 11:11:37.06 .net
>>916
インターフェース作らなくてもテストできるしw

>>917
なるほど、お前が素人だってことはわかった。
ヘルパーを使っていても、そのヘルパーの中身を修正すればいいだけだ
お前はその程度だったんだな。

919 :仕様書無しさん:2018/07/06(金) 11:40:25.73 .net
分界点として一旦は公的なインターフェースに変換してるなら、移植は簡単だろ。

920 :仕様書無しさん:2018/07/06(金) 12:14:12.35 .net
>>918
だからホビープログラミングの話は他所でやってくれ
ヘルパーだと管理下にないコードがどんどん作られていくんだよ
ヘルパーをリファクタリングする前にヘルパーから逃れたコードを洗い出して保護する作業が始まってしまう
これは大仕事だぞ

921 :仕様書無しさん:2018/07/06(金) 12:52:00.69 .net
> ヘルパーだと管理下にないコードがどんどん作られていくんだよ
作られていくわけ無いだろw
そもそも俺がヘルパーといったのはどうしても必要なときだけの話
基本は何も作らない。

いいか?何も作らないんだ。

無駄なラッパーのメンテナンスで時間つぶしてるお前とは違う

922 :仕様書無しさん:2018/07/06(金) 12:52:44.87 .net
>>919
別にインターフェースにしなくてもクラスとして
公的なpublicメソッドにしていれば、何も変わらない

923 :仕様書無しさん:2018/07/06(金) 12:58:47.01 .net
それにしてもインターフェースにしていれば移植が簡単ってどういう理屈なんだろうね
同じインターフェースを持った別の実装が、いきなりバーンと
出来上がるとか思ってるんだろうか?

924 :仕様書無しさん:2018/07/06(金) 13:01:14.34 .net
>>923
公的な。な。
代替システムを売り込みたい企業なんかたくさんあるからな。

925 :仕様書無しさん:2018/07/06(金) 13:13:59.40 .net
>>924
何が言いたいの? ついでだからこの際
日本中、世界中の標準仕様を作りましょうとか
時間かかるだけの無駄な作業をするって話してるの?

926 :仕様書無しさん:2018/07/06(金) 13:15:49.06 .net
標準仕様は重要だぞ。
なんせ標準化されたらそれ使うだけだからな。

927 :仕様書無しさん:2018/07/06(金) 13:32:33.46 .net
はい、そうですね。だからオレオレラッパーなんて
作ってはいけませんね。標準的なものを使いましょう。

928 :仕様書無しさん:2018/07/06(金) 13:37:59.54 .net
話が噛み合って無いんだが。
ラッパーって、要は、俺様仕様→標準仕様のラッパーじゃねーの?
俺様仕様→俺様仕様だったらラッパーって言わねーだろ?

929 :仕様書無しさん:2018/07/06(金) 13:43:12.85 .net
だから標準仕様なんてどこにあるんだよ?

930 :仕様書無しさん:2018/07/06(金) 13:49:57.20 .net
>>928
今糞だって言ってるオレオレラッパーっていうのは
作る目的が、ライブラリそのままじゃ馬鹿には使いづらいだろ?
俺が簡単に使えるようにラップしてやるよ。
お前らクソ野郎は俺様が作ったラッパーを使っていればいい
文句言うな。俺がルールだ、それに従え

ってやつだよ。

こういうラッパーは使いづらい。インターフェースは行き当たりばったりだし
重要な機能が足りない。機能が足りないと文句をいうとラッパーを拡張して
限りなくそのままライブラリを使ったほうがいいものへと"成長"する
オレオレラッパーなんてググっても情報が出てこない
なにが問題があると、ラッパーが原因。そのラッパーのメンテナンスに時間がかかる
心当たりがあるから、ラッパーは糞と言われると
俺様が作ったものを否定するなんて許せないってムキになる

931 :仕様書無しさん:2018/07/06(金) 14:26:29.89 .net
レベルの低い職場でレベルの低いラッパーを日常的に目の当たりにしてる人とは
お互いがイメージするラッパーが乖離し過ぎてて会話にならない

932 :仕様書無しさん:2018/07/06(金) 15:22:10.36 .net
それ、もはやラッパーじゃ無くてフレームワークじゃね?

933 :仕様書無しさん:2018/07/06(金) 15:26:37.65 .net
レベルの高いラッパーってなんだよw

ライブラリをそのまま使えないほどレベルが低いから
ラッパーとかいいだしてるんだろ

934 :仕様書無しさん:2018/07/06(金) 17:41:18.69 .net
>>933
レベルの高いラッパーなんてないと思うじゃん?
俺もそう思うけど、世の中にはものすごく低レベルなラッパーがあるみたいだ

935 :仕様書無しさん:2018/07/06(金) 18:40:53.06 .net
日本のラッパーなんて世界から比べたらお遊戯レベルだろ。
なんせ日本語がラップのリズムに適して無いんだよな。

936 :仕様書無しさん:2018/07/06(金) 18:56:54.08 .net
俺のラップ聞いてからその台詞吐けよ?あん?

937 :仕様書無しさん:2018/07/06(金) 19:12:18.63 .net
>>935
それ考えると、吉幾三すごいよな。
ダサくなることを有利に変えた。

938 :仕様書無しさん:2018/07/06(金) 19:45:02.52 .net
最近の若者はSOLIDを知らんのかね?
都合のいい最小のAPIセットを先に決めて実装する
基本的なことだよね
なんでユーティリティみたいなアンチオブジェクト指向なクラスを作ってしまうのか

939 :仕様書無しさん:2018/07/06(金) 20:07:39.27 .net
死んだぜ麻原彰晃♪
信者は朝から焼香♪
YEAH〜♪

940 :仕様書無しさん:2018/07/06(金) 20:09:03.40 .net
>>938
今は本来はクラスにあるべきメソッドがない場合の話をしてる

941 :仕様書無しさん:2018/07/06(金) 20:33:42.58 .net
>>923
むしろそのインターフェースでソースを一斉検索かけて
クラスが百個近くヒットしたら万事休す

942 :仕様書無しさん:2018/07/06(金) 20:45:46.84 .net
世の中にはインターフェースが同じなら
実装がバグっていても、正しく動くと信じてる人がいる

943 :仕様書無しさん:2018/07/06(金) 20:46:29.41 .net
>>923
簡単にインジェクションできるからね

944 :仕様書無しさん:2018/07/06(金) 20:48:16.35 .net
UtilityでできることはWrapperでできるが逆はできない
なのでUtility作りたくなったらとりあえずWrapper作っとけばいい

945 :仕様書無しさん:2018/07/06(金) 20:49:11.37 .net
>>943
このタイミングで言っても、バグったものを
インジェクションしても、正しく動かないぞって
言われて終わりだろw

946 :仕様書無しさん:2018/07/06(金) 20:49:24.15 .net
>>943
なるほど、やっぱりDI最高だな

947 :仕様書無しさん:2018/07/06(金) 20:51:22.65 .net
>>945
どんなデザインパターンも低脳ドカタがバク仕込むのは止められない
でもドカタに無力だからってデザインパターンが無意味という事にはならない

948 :仕様書無しさん:2018/07/06(金) 20:57:53.64 .net
>>947
はい。だからミスしないようにやる方法が重要なのであって
インターフェースとかDIとか関係ないって話なんですが?
まさかインターフェースやDIを使えばバグが入らないとでも?

949 :仕様書無しさん:2018/07/06(金) 20:58:32.91 .net
コア丸出しのユーティリティクラスはバカがやらかしまくるので危険
バグを量産して苦行デバッグにより徳を高めたい場合には効果的かもしれんな

950 :仕様書無しさん:2018/07/06(金) 20:59:03.37 .net
>>944
だから今フレームワークのラッパーのせいで苦しんでるんですってば
話ちゃんと理解してますか?

951 :仕様書無しさん:2018/07/06(金) 21:00:48.17 .net
ラッパーを使うと、重要な部分が隠蔽され
その重要な部分が変更できなくなってしまうのでだめなんだよ

なぜライブラリはその機能を提供しているのか?を考えれば
それが必要だからとわかる。

その機能を使えなくしてしまうラッパーは糞だし、
じゃあその機能を使えるようにしましょうとなってしまうと
ならラッパーを使わないでそのまま使えばいいやんとなる。

ラッパーのメンテナンスという無駄な作業が発生してる

952 :仕様書無しさん:2018/07/06(金) 21:09:27.16 .net
>>948
なーんもわかってないね
ミスしないようになんてのは精神論だよ
部下に怒鳴り散らすバカと同じ
ミスはどうやってもある程度の確率で紛れこむという事実から目をそらすな
テストをサボるな
テストにためにインターフェースを使え

953 :仕様書無しさん:2018/07/06(金) 21:10:48.35 .net
>>950
前にも言っただろ理解してくれ
ラッパーだから今程度で済んでいたがこれがユーティリティだったらとっくにゲームオーバーだったんだよ
九死に一生を得るって奴だぜ

954 :仕様書無しさん:2018/07/06(金) 21:12:42.08 .net
>>951
隠蔽してるから柔軟に変えられるんだ
これさ
オブジェクト指向の基本中の基本な
基礎をおろそかにしちゃいかんぞキミ

955 :仕様書無しさん:2018/07/06(金) 21:19:32.54 .net
ラッパーが役に立つのは自分がつかうときだけだな
他人が作ったラッパーほど鬱陶しいものはない

956 :仕様書無しさん:2018/07/06(金) 21:22:53.77 .net
うっとおしくないけど
仮にうっとおしくてもいいんだよ

バカなやつに好き放題、生ライブラリでコード汚染されるより遥かにマシなんだな

957 :仕様書無しさん:2018/07/06(金) 21:25:39.88 .net
別にうっとおしくないけど
仮にうっとおしくてもそれでいいんだよ

バカなやつに好き放題、生ライブラリでコード汚染されるより遥かにマシなんだな

958 :仕様書無しさん:2018/07/06(金) 21:29:32.80 .net
対して文意がかわってないのに内容が気に食わなくて2重投稿してしまうメンタル
他人のコードを汚染呼ばわりする態度

きさまリファクタやろうだな鬱陶しい

959 :仕様書無しさん:2018/07/06(金) 21:39:33.77 .net
二重投稿は電波が弱いところ入ったからミスっただけだ
汚染コードは事実だろ
外部ライブラリをあっちこっちにばら撒く行為を汚染と言わずになんというのか

960 :仕様書無しさん:2018/07/06(金) 22:37:18.97 .net
じゃあなにか
jre.jar以外にはかたっぱしからラッパーつくってんのか?

そこまでして何がうれしいんだ

961 :仕様書無しさん:2018/07/06(金) 22:38:36.92 .net
こりゃだめだ通じん

962 :仕様書無しさん:2018/07/06(金) 22:40:49.15 .net
お前がいったことといったら
馬鹿なやつと汚染呼ばわりだけじゃねーか!!

通じてたまるか

963 :仕様書無しさん:2018/07/07(土) 01:01:25.97 .net
jre.jar(笑)

知ったかぶりはレスすんなよ

964 :仕様書無しさん:2018/07/07(土) 01:02:15.45 .net
なんかへんか?

965 :仕様書無しさん:2018/07/07(土) 09:53:44.44 .net
https://qiita.com/sudachi808/items/364add4e96a8d6edc82b

966 :仕様書無しさん:2018/07/07(土) 10:07:05.45 .net
> このViewModelが仕様通りに動くかどうかテストしたい場合、どうしますか?
> わざわざその時間になるまで待って動かしますか?
>
> それはさすがにありえないので、
> 任意の値を返せるTimeProviderのモックアップを作ってテストします。

一方俺は、コンストラクタで任意の時間を指定できるようにした
コードは短くなり、インターフェースなど不要になった

class GreetingViewModel {

 var now: Int

 init(now: Int) {
  self.now = now
 }

 func greet() -> String {
  switch self.now() {
  case (let hour) where (6 <= hour && hour <= 11):
   return "Good Morning"
  case (let hour) where (12 <= hour && hour <= 17):
   return "Good Afernoon"
  case (let hour) where (18 <= hour && hour <= 23) || (0 <= hour && hour <= 5):
   return "Good Evening"
  default:
   return "Hello"
  }
 }
}
var viewModel = GreetingViewModel(now: Calendar.current.component(.hour, from: Date()))
print(viewModel.greet())

967 :仕様書無しさん:2018/07/07(土) 10:08:35.45 .net
>>965
やっぱりDIを勘違いしてるなぁ

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

 https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html

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


この依存関係の図2をみなよ

968 :仕様書無しさん:2018/07/07(土) 10:12:28.71 .net
Dependency Injection の基本的な考え方は、独立したオブジェクトを
Assembler(組み立て係)として用意するってところなんだが、
そのことについて全く触れていない

そしてそのAssembler(組み立て係)が、MovieFinder インタフェースの実装を
MovieLister クラスのフィールドへ適切に設定させるというものなんだが、
それについても全く触れていない

969 :仕様書無しさん:2018/07/07(土) 10:48:01.81 .net
そう思うなら指摘してあげなよ
これがDIだって広まってる

970 :仕様書無しさん:2018/07/07(土) 10:48:58.23 .net
次スレ

オブジェクト指向、DIとService Locatorの違いを教えて4
https://medaka.5ch.net/test/read.cgi/prog/1530928077/

971 :仕様書無しさん:2018/07/07(土) 13:29:05.26 .net
>>966
5時を引数にインスタンス化して1時間後にgreetしたらテストエラーになるだろ
ほらなDIを使わないからバグが量産されるんだよ

972 :仕様書無しさん:2018/07/07(土) 13:41:57.60 .net
>>971
それとDIになんの関係が?
DIって 独立したオブジェクトを
Assembler(組み立て係)として用意するって
ことわかってるよね?

973 :仕様書無しさん:2018/07/07(土) 14:15:10.08 .net
>>972
ならそれを数学的に証明してみて

974 :仕様書無しさん:2018/07/07(土) 14:43:32.46 .net
>>973
http://kakutani.com/trans/fowler/injection.html

ここにかいてある図2が数学的な証明だよ
https://kakutani.com/trans/fowler/injector.gif

いいか?これが"数学的"な証明だからな
最近数学的証明の意味をわからないやつが多すぎる

975 :仕様書無しさん:2018/07/07(土) 14:45:57.38 .net
>>974
それが数学的証明であることを数学的に証明してみて

976 :仕様書無しさん:2018/07/07(土) 14:46:05.38 .net
ネタにマジレスっていおうとしたら回答がさらにネタだった

977 :仕様書無しさん:2018/07/07(土) 15:01:57.46 .net
>>975
え?どうやって??
お前数学的証明を数学的に証明することなんてできるの?
そんなもんできないから数学的証明っていうんだけど?

978 :仕様書無しさん:2018/07/07(土) 15:03:52.20 .net
>>977
あーあ
できないんだ
じゃあ最初の証明も嘘なんだね
本当に正しいことなら数学的に証明できるはずだもの

979 :仕様書無しさん:2018/07/07(土) 15:05:51.54 .net
>>974
とりあえず公理系を書き出してみて

え?できない?それ数学的証明じゃないよ

980 :仕様書無しさん:2018/07/07(土) 15:08:42.12 .net
>>978
フェルマーの定理とか実際は長すぎて誰もついてけない
プログラムだってすぐバグるのにどっか間違ってないはずがない
数学だから正しいなんてことがあるか

経験的に実証されたものこそ真実

981 :仕様書無しさん:2018/07/07(土) 15:19:59.41 .net
>>978
お前馬鹿か。
数学的証明をわかってないじゃないか。
何かを数学的に証明することはできるが
数学的証明だけは数学的に証明できないと決まってる

982 :仕様書無しさん:2018/07/07(土) 15:20:35.59 .net
>>979
え? 普通に数学的証明なんだが?

983 :仕様書無しさん:2018/07/07(土) 15:24:23.06 .net
>>979
> とりあえず公理系を書き出してみて

公理系もしらんのか?
常識だからぐぐれ

984 :仕様書無しさん:2018/07/07(土) 15:25:42.15 .net
そもそも数学的証明って何か知ってるのかな?

例えばお前が山田だっていうのは
数学的に証明できる

自分が山田だと名乗ればいいのだから
これが数学的証明

基本だからこれが理解できない人は
話に参加しないでほしい

985 :仕様書無しさん:2018/07/07(土) 15:26:37.64 .net
また別の例ではジョブズは死んだという命題があるとする

さてここでジョブズとは誰か?
それは数学的証明によってスティーブ・ジョブズのことであることが
証明されている

ここまではいいな?

986 :仕様書無しさん:2018/07/07(土) 15:27:18.42 .net
ではスティーブ・ジョブズとは誰かだ?

これも元Apple CEOのスティーブ・ジョブズであることが
数学的帰納法によって証明できる

987 :仕様書無しさん:2018/07/07(土) 15:28:25.84 .net
だが、ここでAppleとはなにか?という
命題が出てくる。

AppleといってもいろんなAppleがあるだろう。
例えばApple自動車保険だ

988 :仕様書無しさん:2018/07/07(土) 15:29:17.78 .net
だがここでアップル保険でないことは
数学的証明で証明できる

989 :仕様書無しさん:2018/07/07(土) 15:29:50.95 .net
>>981
じゃあできないことを数学的に証明してみて

990 :仕様書無しさん:2018/07/07(土) 15:30:08.25 .net
それは公理系を書き出してみればわかる

991 :仕様書無しさん:2018/07/07(土) 15:30:43.63 .net
この世にはアップル自動車保険などない
Appleといえば、Appleしかないのだという
公理系に置いてAppleはAppleなのだ

992 :仕様書無しさん:2018/07/07(土) 15:31:25.35 .net
故にジョブズは死んだにおける
ジョブズはスティーブ・ジョブズのことであり
スティーブ・ジョブズは元AppleのCEOであることが証明できる

993 :仕様書無しさん:2018/07/07(土) 15:31:37.17 .net
ドカタが無理に数学的って言葉を使ってるの痛々しいなw

994 :仕様書無しさん:2018/07/07(土) 15:32:11.06 .net
ではジョブズは本当に死んだのか?
それは、写真を見ればわかる。
あれはどう見てもガンだ

995 :仕様書無しさん:2018/07/07(土) 15:32:50.92 .net
もうここまで言えばわかるだろう?
数学的証明ができない問題などない

996 :仕様書無しさん:2018/07/07(土) 15:33:12.21 .net
悔しかったら反論してみろ

997 :仕様書無しさん:2018/07/07(土) 15:33:32.97 .net
ジョブスは三丁目の山田んとこの倅だよ
はいこれでこの数学的マンの証明が嘘と証明されました
同じように考えて>>974も嘘とわかりますね

998 :仕様書無しさん:2018/07/07(土) 15:34:50.16 .net
盛り上がってる所済まないが、
これはDIという言葉を作った人が作った
定義なんだから、数学的証明の範疇じゃないよ

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

DIの定義
https://kakutani.com/trans/fowler/injector.gif

999 :仕様書無しさん:2018/07/07(土) 15:35:31.52 .net
つまりはガンで死んだことに異論はないわけだ

1000 :仕様書無しさん:2018/07/07(土) 15:36:35.40 .net
>>998
はい、わかってます

1001 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1001
270 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★