X



オブジェクト指向とDIを分かりやすく例えて教えてくれ 3
■ このスレッドは過去ログ倉庫に格納されています
0001仕様書無しさん
垢版 |
2018/05/19(土) 21:44:19.89
■ オブジェクト指向・デザインパターン(有用)
 
 わかり易い例
 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/
0484仕様書無しさん
垢版 |
2018/06/18(月) 02:20:07.14
>>482
そこに関しちゃそうだな
どっちかというと、ユーザーの要望と要件は1/3ぐらい真の要件や最適解とは程遠いので、そこを整理せずに設計するとカオスになるんだと思うよ
0485仕様書無しさん
垢版 |
2018/06/18(月) 07:14:41.26
>>476
>オブジェクト指向とDIは画面とエンティティとテーブルに綺麗な対応関係があるって前提からスタートしてるから

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

OOA/OODやDIを否定して勢い余ってOOPまで否定するのは感心せんな。
0486仕様書無しさん
垢版 |
2018/06/18(月) 07:17:19.27
>>483
お前に技術力がないだけでは?

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

お前が、画面をもとにモデルを設計してるからそうなるんだよ。
というか設計してない。単に画面をそのままコードに変換してるだけ
0491仕様書無しさん
垢版 |
2018/06/18(月) 08:34:56.58
>>488
そら設計できないお前にとってはありとあらゆる設計手法が机上の空論やろw
0492仕様書無しさん
垢版 |
2018/06/18(月) 12:44:38.66
>>486
じゃ、データがリアルタイムで更新されるとして
そこに表示されるコンボボックスの要素もリアルタイムで更新されるとしたとき
どんな設計するん?
モデルとビューは関係ないとかキチガイ発言繰り返すのん?
0493仕様書無しさん
垢版 |
2018/06/18(月) 14:26:26.57
>>492
なにその初歩的なお題
そんなところで躓いてる奴が「机上の空論」ってドヤってんのか

そうやって煽ってアドバイスをもらおうとするのやめた方がいいよ初心者さん
0494仕様書無しさん
垢版 |
2018/06/18(月) 18:51:47.24
>>493
でも解決方法はこんな簡単な問題でもビューとモデルを包括した仕様の変更しか無いよね?
この程度で限界が来ちゃう理論を大事に守ってるのってなんか意味あるの?
0495仕様書無しさん
垢版 |
2018/06/18(月) 19:19:16.24
>>492
MVVMという言葉で調べておいで。
本当に能力不足だったようだw
0496仕様書無しさん
垢版 |
2018/06/18(月) 19:20:08.86
>>494
この程度で、自分の限界が来ちゃってるのねw
お前、この業界にいる意味あるの?
0497仕様書無しさん
垢版 |
2018/06/18(月) 20:18:43.80
画面を区分けしてそれぞれにViewとModelを割り当てる
画面全体は各Viewを取りまとめたり、相互作用を仲介したりする
0498仕様書無しさん
垢版 |
2018/06/18(月) 20:40:04.70
>>496
え?このままじゃどうにもならないでしょ?
頭悪いの?
コンボボックスで選択してる間に選択項目消えちゃうって言ってるんだよ
0500仕様書無しさん
垢版 |
2018/06/18(月) 23:28:53.37
>>498
選んでる最中に消えるからどうにもならないって?
どうするか決めろのが設計だろアホw
0501仕様書無しさん
垢版 |
2018/06/18(月) 23:40:21.48
この分じゃ楽観的ロックも知らんのやろうな

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

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

程度の話だろw
0505仕様書無しさん
垢版 |
2018/06/19(火) 07:18:28.77
全部消えちゃった時どうすればいいかわかんないんです。
0507仕様書無しさん
垢版 |
2018/06/19(火) 07:26:00.21
仕様がないんです。会社のコード見てもよくわかんないんです。
どうしたら良いんでしょうか?誰か教えてください。
0512仕様書無しさん
垢版 |
2018/06/19(火) 17:15:37.12
ビューとモデルが分離されてると
使いやすいUIに変更するときも便利
良いことならたくさんあるよ
0515仕様書無しさん
垢版 |
2018/06/19(火) 17:43:58.81
逆にビューとモデルを分離せずにいいことあったかどうかを聞きたいね
別にシンプルになるわけでもないし
0516仕様書無しさん
垢版 |
2018/06/19(火) 17:52:42.07
やたらめったら抽象化された7個のインターフェース、13個のクラス
オープンソースライブラリ使いまくりのゴミコンソールアプリを作ってるバカな同僚がいたから
同じことをする10行ぐらいのスクリプトを書いてやったら急に怒り出した
DI厨ヤバすぎ
0518仕様書無しさん
垢版 |
2018/06/19(火) 19:24:17.79
>>517
めちゃあるよ
DIするとバカみたいにクラスやインターフェースが増えて大したことしてないのにメンテナンスコストが増える
0520仕様書無しさん
垢版 |
2018/06/19(火) 19:50:15.21
DIを使うとコードが1割、2割は確実に増える
経験的に最悪で2倍ぐらいかな
0521仕様書無しさん
垢版 |
2018/06/19(火) 19:53:29.08
DIのデメリットはコードが増えると言うよりも
価値がないコードができるということ
0524仕様書無しさん
垢版 |
2018/06/19(火) 20:02:42.71
シェルのパイプラインでサクサクつなげて30秒で入力おわり即実行みたいな処理も
JavaやC#でDIを使うとサブプロセスをインターフェースで隠蔽してインジェクト、
データベースもインジェクト、Webアクセスもインジェクト、設定ファイル読むのもインジェクト
って具合にアホみたいに大量のクラスとインターフェースが作られる
ビルドも遅いしコンテナサービスセットアップしてクラス全部登録すんのも超めんどくさい
0525仕様書無しさん
垢版 |
2018/06/19(火) 20:03:46.05
>>523
だから俺は価値がないDIを使わないって。
DIは特になにか必要になってるわけじゃないのに
こんなふうに(冗長に)書け。そうすれば
そのうち役に立つかもしれないって押し付けるパターンだからね
0528仕様書無しさん
垢版 |
2018/06/21(木) 22:54:49.91
>>524
それで済む程度の処理にDIなんか使うわけないじゃん
「同僚」とやらが実在するなら注意してあげな
0529仕様書無しさん
垢版 |
2018/06/21(木) 23:06:29.63
そのとおり
DIなんて使うわけないんだよ普通はね
0531仕様書無しさん
垢版 |
2018/06/22(金) 06:38:06.50
ではどういうときに必要になるかと言うと、
その具体例はでてこないという
だって、必要だからDIを使うのではなく
とりあえずDIを使っとけになってるから
0534仕様書無しさん
垢版 |
2018/06/22(金) 08:42:43.84
しょぼい案件で工数がそれほど見込めない時に水増しする為に無駄な実装でかさ上げするのに有効。
0537仕様書無しさん
垢版 |
2018/06/23(土) 09:39:53.14
DIは最高すぎるけどなぁ
本当に同じものについて語ってるのだろうか
0539仕様書無しさん
垢版 |
2018/06/23(土) 11:07:26.10
300行で書けるスクリプトがJavaとDIのせいで2000行ぐらいに膨れ上がった
ほんと害悪なんだが
0542仕様書無しさん
垢版 |
2018/06/23(土) 13:43:59.61
ドカタがドカタ言語で書くとDIは冗長になるのは分かるよ?
でもそれはドカタが悪いのであってDIの所為じゃない
こっちはDI使ってシンプルで読みやすく保守しやすいコードが書けるんだから寄ってくんな
0544仕様書無しさん
垢版 |
2018/06/23(土) 13:54:28.72
というかjavaやc#がうんこだからDIで安全マージンとりながらやらなければならない
スクリプトだったらそんなん要らん
0547仕様書無しさん
垢版 |
2018/06/23(土) 14:58:12.71
>>542
> ドカタがドカタ言語で書くとDIは冗長になるのは分かるよ?
俺はわかんないよ

なんで、ドカタがドカタ言語で書くとDIは冗長になるのか
説明してくれよ
0549仕様書無しさん
垢版 |
2018/06/23(土) 16:25:52.61
DIで冗長になる前提で話してるのが意味不明
冗長になるって言うならコード書いてみてよ
0550仕様書無しさん
垢版 |
2018/06/23(土) 16:29:22.88
ドカタがドカタ言語でどんなコード書くのか興味深い
0552仕様書無しさん
垢版 |
2018/06/23(土) 17:07:44.52
じゃあお題

$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を使うとどうなる?
0554仕様書無しさん
垢版 |
2018/06/23(土) 18:34:11.17
ドカタはexcel使う必要あるんだね
成る程ドカタだわ
0555仕様書無しさん
垢版 |
2018/06/23(土) 19:14:20.37
ほらみたことか
DIじゃろくな事にならないからって無様な捨ぜりふ吐いて逃げるんだもんなぁ
普段偉そうなこと言ってるわりにこれだもん
DI厨の限界見えたわ
0556仕様書無しさん
垢版 |
2018/06/23(土) 19:32:29.71
処理の概要とideone.comなどコードが見易い所にあげるぐらいの気遣いは欲しいな

色んな依存はある気がするが処理がこれしかないならこのままでいいんじゃね?
0557仕様書無しさん
垢版 |
2018/06/23(土) 19:36:15.29
DI厨「DIの不利を悟ったから関係ないこと言ってお茶を濁そう」
0558仕様書無しさん
垢版 |
2018/06/23(土) 19:41:55.71
全体で20行ぐらいのコードしかないのに
DIする奴いるの?
0559仕様書無しさん
垢版 |
2018/06/23(土) 19:44:18.96
アンチDIって、DIやってる人がいつでもどこでもDIやってると思ってるんだろうか
0561仕様書無しさん
垢版 |
2018/06/23(土) 19:50:03.16
Mochなどと同じで汎用性が欲しい時、テストとかしやすくしたいときに使おうってだけの話だよね
0562仕様書無しさん
垢版 |
2018/06/23(土) 19:51:43.39
>>561
またテストか。DIはテストだけのものじゃないって言ってるだろ
0563仕様書無しさん
垢版 |
2018/06/23(土) 19:54:55.70
クッソ笑える
DI厨全滅かよwww
なーにが「い、いつもDIするわけじゃねーし」(ふるえ声)
だよwwwww
0565仕様書無しさん
垢版 |
2018/06/23(土) 19:58:43.75
じゃあJavaとDIでシステム組んで最後の1つの機能が>>552で、これ移植したら円満にプロジェクト終了って時はどうすんの?
そうなってもいつもDIするわけじゃねーし、だの、1つくらいDIじゃなくても問題ないなんつって逃げそうだよなお前らw
0566仕様書無しさん
垢版 |
2018/06/23(土) 20:07:51.84
>>564
適材適所がわからないんだな
スクリプトでやるようなことをDI使ってやれって、頭沸いてんのか?
0567仕様書無しさん
垢版 |
2018/06/23(土) 20:15:23.96
>>566
やっぱり言い訳するんだ
99%Javaで美しいDIで一生懸命組み上げたシステムの最後のピースがやっつけのスクリプトってさぁ
やれやれだよホント
0570仕様書無しさん
垢版 |
2018/06/23(土) 20:23:34.02
まったくだ
JavaもDIも役立たずのゴミ
スクリプトを書いたほうが短く簡潔で保守性も高まる
0571仕様書無しさん
垢版 |
2018/06/23(土) 20:29:07.45
全ての規模をスクリプトで書くのか
まあがんばれ
0572仕様書無しさん
垢版 |
2018/06/23(土) 20:32:13.56
>>571
少なくともここにいるDI厨はスクリプトでやるらしいぞ
大規模システムの一部という前提を与えてやってもDIでやる場面じゃないだのなんだのと言い訳してDIを拒む
じゃあもうどこでDIすんだって話だよ
0575仕様書無しさん
垢版 |
2018/06/23(土) 20:41:56.64
おうおう
出るわ出るわ負け惜しみ
ここでサクッとJavaのDI使ったコードを書いて黙らせるぐらいのことできんのかねぇ
0580仕様書無しさん
垢版 |
2018/06/23(土) 21:08:21.11
Javaで作るような大規模システムをサクッと書いてよ
0581仕様書無しさん
垢版 |
2018/06/23(土) 21:33:48.06
エクセルの内容をノールックでDBに入れるだけの簡単なお仕事
0583仕様書無しさん
垢版 |
2018/06/23(土) 21:53:04.63
書き直す気力も起きない程の圧倒的ドカタコードを提示する事で
相手のヤル気を削ぐ作戦に出るとは恐れ入った
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況