オブジェクト指向とDIを分かりやすく例えて教えてくれ 3
■ このスレッドは過去ログ倉庫に格納されています
■ オブジェクト指向・デザインパターン(有用)
わかり易い例
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/ >>579
どうウンコなのか具体的にってことだろカス DIは百害あって一利なし
利用者もゼロ
これが現実 >>587
自分ができないことってこき下ろしたくなるんだよね >>587
これ見るとDIアンチはただの病気だってことがよくわかる >>589
できるが無駄が多すぎと言ってる
そもそも出来ない君たちとは違うんだな >>591
そうやって悪口言うしか出来ないんだね
完全敗北ってやつだよソレ >>592
みた結果がこれだよ
>>594
普段からDI推奨してるこのスレの住民ですらお題を出したらまったくDIを使わないということが明るみに出てしまった >>597
ほらまた言った
負け惜しみの悪口はやめて素直に参りましたって言えば良いのの プログラマならコードで語れ
DI派はDI使ったコードを書いてようやっと議論のスタートラインに立てる
でも何を言われても書かこうとしない
負けを認めてんだよ内心ではね
でも悔しいから負けたという事実は言葉にはせず悪口に逃げるんだ >>603
君がお題に対してDIを使ったコードを書いたら1にカウントしてやるよ 業務用のコードこんなところで晒して勝った気になるのはまずくないか? そもそもオブジェクト指向もDIも大規模開発の複雑さに立ち向かうための手法なのに、それを理解してない奴が
1ファイルのスクリプトを例に出して、ほらDIなんていらない、とかドヤってんだよなww >>614
大規模開発の奴隷なんだよわかってやれや >>614
雑魚の理論
小さいまとまりの集まりで大きなものを作るんだ
大きくなると造りを変えないといけないんんてのは多分何も作れてないんだそいつ >>552
このくらいの規模だとDIに限らず
関数もクラスもモジュールもクロージャも要らないけど
だからって大きなプログラムで不要な事にはならないよね?
いや、もしかしたらドカタはmain関数で全てやりくりするから不要なのかな?w >>619
もしかして、クラスに分ける=DIを使うと思ってる?
ならアホだよ。
main関数ですべてやりくりするわけ無いじゃん。
DIは使わずにクラスに分けるだけ
はぁ。そんなこともわからんのかね >>552にDIが不要だからって、常にDIが不要な事を示せてないって言ってるだけなんだけど
>>620には理解できなかったみたいだねw
流石ドカタやってるだけあるわ ?
お前はDIがいると言ってる。
俺はいらないと言ってる。
で?お前はDIがいると言うだけ?
理由は? お前がDIがいると言ってることなんて
最初からわかってるんだよ。理由を言え 俺にはDIはいるけどお前のようなドカタには不要だよ
だから意見は一致している
ドカタはドカタとして生きていけ スクリプト厨「DIが優れてるというなら>>552をDI使って書き直してみろ」
DI厨「いつでもDIするわけじゃない。この程度ならDIは不要」
スクリプト厨「じゃあこの処理が大規模システムの一部だったらと仮定しよう。他の99%の機能はDIで作られてるので、アーキテクチャの一貫性のためにこの機能もDIで実装しなきゃならないよね」
DI厨「罵詈雑言。罵詈雑言。罵詈雑言」
これじゃあどう見てもDI厨の負けだぞ
お前ら普段からDIなんて使ってないんだろ? >>552をクラスには分けないんでしょ?
なんでDIだけ入れろというの? >>629
分けたいなら分ければ?
DIに必要なことならなんでもやっていいよ
まっ無駄な工数だけどDIには必要なんだろ 依存オブジェクトの固定化をやめるだけで盛り上がってるな >>630
20行のコードを
クラスに分ける必要ないし
DIにする必要もない
でもだからと言ってクラスもDIも不要にはならない >>633
ドカタ「じゃあこの処理が大規模システムの一部だったらと仮定しよう。
他の99%の機能は関数で作られてるので、アーキテクチャの一貫性のために
この機能も関数で実装しなきゃならないよね」 >>634
はやくDIしてよ
ドカタにはDIは難しいすぎたか? DIするとテストが簡単になるらしい。
なら>>552のコードをテストしていただきたい
それでDIの真価が発揮されるのだろう? $app = New-Object -ComObject Excel.Application
お前はCOMのインターフェースを実装したオブジェクトをインジェクションしている >>637
じゃあそれをインジェクションしないコードに書き換えてみてよ
できないでしょ?w
なんでもかんでもインジェクションといってるから
恥をかくんだよ。 DI厨ってさ遊び半分なんだよね
論理的にDIが綺麗だってのはわかるよ
でも現実の仕事じゃコードを冗長でわかりにくくしてるだけ
テストもモック書くのがめんどくさいし
工数を数倍に膨らませてまでやるこっちゃない >>640
実装に依存した考え方しかできないなら
ドカタと言われてもしょうがないね DIはいらない。COMで全部作れば
インジェクションになるからだ
誰だ? DIとはオブジェクト指向の依存関係を"ひとまとめに"定義する部分と、それを利用するために
オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン
というやつは?
俺は認めないぞ!
俺の考えるDIこそが世界唯一のDIなんだ! という茶番からもわかるように、
依存関係を"ひとまとめに"定義する部分と、それを利用するために
オブジェクトを直接newするのではなく、DIコンテナにnewしてもらうパターン
でないものはDIではないのです。
DIではないのだからインジェクションと読んではいけません 適切なデザインパターンを適用すればいいだけでは?
つまり依存関係をひとまとめに定義なんかする必要はないということ
それはDIではないということを意味する >>646
ほとんど切り離し不可能
COMは実装ありきのインターフェースだから複雑すぎるんだよ >>648
は?>>552のコードをDIで抽象に依存しろと? 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だとさらに長くなるんだろこれ 何でもインラインで空行も入れないから見にくくてしかたないな こんな汚いコード書く奴がDIの可読性うんぬん言ってんだから滑稽だわ 威勢のいいことを言うけど綺麗なDIコードは書けない
それがDI厨なんだなぁ
プログラマならコードで語りなよ
ほんと情けないよDI厨 むしろ打ちのめされて元気ないように見えるDI信者さんたち そっか
負けっぱなしじゃツマラナイもんな
飽きてもしゃあない ここまでのやり取りで、ドカタはエンジニア様がDI使って作ったものを
10行程度のスクリプトで利用するだけだって分かったね
良かったよかった ドカタが10行程度のスクリプトでできる事をDI厨はできなかったという事だよ ドカタ「じゃあこの処理が大規模システムの一部だったらと仮定しよう。
他の99%の機能はクラスで作られてるので、アーキテクチャの一貫性のために
この機能もクラスで実装しなきゃならないよね」 >>666
なんでもかんでもDIすりゃいいってもんじゃない
99%DIだろうとこの程度のスクリプトにはDIは使わん
サブプロセス呼び出しで十分 >>552もよく見りゃDBの接続を環境変数に外出ししてるな
こういった処理が数100もあって、例えば対象のフォルダ、シート名、セル参照、テーブル名といったものが微妙に違った時に、否定派はその都度書くのだろうか? 微妙に違うならパタメタライズすればいいだけだよ?
むしろそういうのはDIのほうが苦手
DIはどちらかというと特化する方向に作りこんでいくからな
リポジトリなんてほとんどテーブルと1:1だろ?
テーブルが100個あったらインターフェースとクラスとエンティティが100個ずつできる
スクリプトならパラメータ化したやつ1個で十分 シート名やセル参照も同じ
DIだと神エクセルのパターンごとに読み取りクラスを作る
神エクセルの種類が100パターンあったら読み取りクラスも100種類
バカバカしいよほんと
スクリプトならシート名とセルアドレス、プロパティのマッピング定義を指定するだけでOKな関数を1つ書くだけなのにな 思い込みが強くて応用の効かない阿玉の固い人間というのは良くわかった DIはクラス間の依存関係を解決するためのもので、
設定ファイルから設定値を読み込むのはDIじゃない 設定値の読み込みはインフラに依存するのでDIしないとだめだよ なんでもDIでやるからほら変な癖がついてる
DIでやる必要のないものまでDIでやってる
設定の読み込みはDIとは無関係 設定をコードに散らばらせずに一箇所にまとめるメリットは分かるのに
クラスの依存関係をコードに散らばらせずに一箇所にまとめるメリットは分からないの? 設定だから一箇所にまとめることにメリットあるわけで、
設定じゃないものは、一箇所にまとめるメリットないぞ?
すべての処理を一箇所にまとめたらデメリットだってわかるだろ?
一箇所にまとめる = メリットなんじゃなくて
設定を一箇所にまとめる = メリットなんだよ 「設定」は一箇所だろではなく
「シングルトン」は一箇所だろに
話が変わっているところに注意
今話をしているのは「設定」だから
一箇所にすることにメリットが有るという話で
設定じゃないもの(クラスやシングルトン)は
一箇所にしたところでメリットはない データベースも最終的に呼び出す場所は1箇所だけどな。 なるほど、設定だから、一箇所にまとめるわけですね。
設定じゃないものは、まとめないしDIを使う必要もないと ■ このスレッドは過去ログ倉庫に格納されています