オブジェクト指向って自然な文法だな 3 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
2017/04/04(火) 19:54:26.70ID:bhbbdSm0
>>54
これがオブジェクト指向の一つの存在パターンやしな
スマホアプリとかの画面パーツはこれで配布してるし
5852
垢版 |
2017/04/04(火) 20:11:51.69ID:PnaBNYoq
操作がクラス名としておかしいと、
何かの読み物で読みました

名詞じゃないクラスは
オブジェクト指向が出来ていないと
疑えと

じゃあデータベースなら良いのかなと
思いましたが、屁理屈かなとも思い
2017/04/04(火) 20:18:23.65ID:y0lCbigz
それってUpdateHogeクラスみたいなのがあるってことなの?
Commandパターンとかなら理解できるが
データベース操作用にそういうクラスは普通作らないわな
60デフォルトの名無しさん
垢版 |
2017/04/04(火) 20:57:28.90ID:pJiiTfw5
>>56
その抽象化がDAOやろ?
2017/04/04(火) 21:01:19.65ID:eKQOUvI0
DAOクラスの設計までごちゃごちゃ言い出すのがオブジェクト指向

お前らの話聞いてたらデータベースにつなぐのに何年かかんだよ
2017/04/04(火) 21:08:11.49ID:QcgfrUUh
>>61
説明だけなら数分もあれば終わるだろうから
それ聞いて接続できるまでの時間はお前次第だと思う。
2017/04/04(火) 21:08:42.56ID:8WGG2cnP
extensionがすべて解決してくれる…!
64デフォルトの名無しさん
垢版 |
2017/04/04(火) 21:09:58.53ID:pJiiTfw5
でもDAOが糞面倒なのは同意だが
2017/04/04(火) 21:26:31.39ID:y0lCbigz
>>60
リポジトリ
2017/04/04(火) 21:38:41.73ID:bhbbdSm0
db操作クラスっていかんのか
名前の通りdbから変数やデータ取り出して入れる専用クラスって意味でいいんだよな?

オブジェクトで使い易いんじゃないのか??
2017/04/04(火) 21:57:16.59ID:ld6GL0Sw
db操作クラスにキャットドアつけよーぜ!
2017/04/04(火) 23:04:38.14ID:eKQOUvI0
>>62
絶対に数分じゃ説明できない

途中で猫の生態みたいな解説をいれるのがオブジェクト指向だから

SQL叩きますの他の言語とは一味違う
2017/04/05(水) 00:16:02.14ID:Zf7glq/Z
>>68
猫の生態とは例えばどんなことを
お前は説明するの?
2017/04/05(水) 00:38:08.73ID:yRUZ/Ldq
オブジェクト指向ってこういうやつやろ!?が酷すぎて
田舎の中学生が「ぼくのかんがえたアメリカ人」の作り話を大人にしてるみたいになっとるな。
2017/04/05(水) 00:38:34.63ID:hA0nFIPv
>>60
ちゃう。抽象化を間違っちゃったのが、DAO
2017/04/05(水) 00:56:26.96ID:T1xSqOuQ
クラス名が名詞じゃないDB操作クラスってマジどういうの?
73デフォルトの名無しさん
垢版 |
2017/04/05(水) 08:19:13.48ID:RcS41rYJ
>>71
どう間違ってるの?
2017/04/05(水) 09:38:42.71ID:Zf7glq/Z
俺がDAOの存在理由が理解できないから、間違い
2017/04/05(水) 10:59:33.50ID:1lx41BrP
>>74
【が】が多い
2017/04/05(水) 15:50:39.12ID:UwNB2dkT
>>74
存在が間違ってる奴本人が自己紹介

>>73
DAO 想像力が足りない 辺りでググれば出たくるんじゃなかったかな

あの記事はPHPerのものにしてはとても良く書けているから必読だ。
近くにActiveRecordとDataMapperの実装解説もあるから、まだDAOとか言うゴミを使ってるバカは是非読んだ方がいい。
最終的な実装はあれでもダメダメだけどな。
77デフォルトの名無しさん
垢版 |
2017/04/05(水) 21:47:59.72ID:ABzSOhTe
オブジェクト指向は命名が重要だけど、DTOにはなんて名前付けてますか?

自分はHogeDTOとか付けてるけど
我流なんで自信が無いです
2017/04/05(水) 22:31:27.34ID:T1xSqOuQ
個人的にはHogeDaoとかHogeDtoみたいなのがたくさんあるとやる気なくす
HogeQueryとかHogeCommandとかHogeJsonみたいなもう少し意味のある名前がいい
2017/04/05(水) 22:56:14.24ID:YCJsuu6b
>>78
お前の個人的なやる気なんか知らないが、
何でもかんでもDTO作りまくる設計は、確かにアホ
80デフォルトの名無しさん
垢版 |
2017/04/05(水) 23:31:52.52ID:ABzSOhTe
ほぼストアドでシステム開発してる人が
最近の連中は技術が無くてストアド書けないと嘆いていたのですが
ストアドでオブジェクト指向は出来るんですか?

C#+EFでほとんどSQLを書いたことが無いので
データベース事情に明るくないもので
2017/04/06(木) 00:05:36.90ID:F4y9oj5j
SQL serverならSQL clrが使えるはず
2017/04/06(木) 01:57:21.96ID:FGV9lFi+
なぜにストアドでオブジェクト指向!?
2017/04/06(木) 04:16:30.36ID:2G8EDGPv
>>80
一応Ora限定で出来たと思うけど、Web方面だと
エッジサーバ側であれこれするからストアドいらん気もするよ
業務系だとストアド一本で職になるようだが
2017/04/06(木) 04:54:01.44ID:2G8EDGPv
1クラスについて、最低1in/1out(interface)を作るよう指示されたことあったな
全てのクラスについて

ヘキサゴナルなんだと、それが……
2017/04/06(木) 05:56:27.93ID:8G48c3ze
なんでもストアドでやるのはバッドノウハウだが使うべき所では使わないとくっそ遅いシステムが出来上がるぞ

某大手ITが作ったくっそ高いシステムみたいに

オブジェクト指向も拗らせ過ぎるとこうなるって典型例
86デフォルトの名無しさん
垢版 |
2017/04/06(木) 09:05:31.52ID:sp2ENUYJ
>>76
最終的な正解が書いてあるサイトはどこですか
2017/04/06(木) 09:40:42.68ID:rNIgAdOn
>>85
その話のどこにオブジェクト指向が関係するのか?
2017/04/06(木) 10:32:51.49ID:bi7gIbpv
第 (N+1) 次オブジェクト指向問答
https://togetter.com/li/1097950
89デフォルトの名無しさん
垢版 |
2017/04/06(木) 12:29:44.71ID:GOr1AWzR
>>82
オブジェクト指向と言わず
共通の開発手法があるのかなと

モデリングがそれに当たるのかな
2017/04/06(木) 12:47:05.55ID:fGciOGwI
>>86
I'll tell you nothing.
The answer is where it's present will not be indicate even by Google.
That must find out by an effort and a deliberation of yourself own.
2017/04/06(木) 12:49:59.24ID:fGciOGwI
be
92デフォルトの名無しさん
垢版 |
2017/04/06(木) 13:35:28.83ID:fKQHZKUE
>>90
Oh, dont say that!Dont say that.Im a stupid man.You should be kind to me!
2017/04/06(木) 13:41:15.62ID:fGciOGwI
>>92
ね ぼ け る な!
94デフォルトの名無しさん
垢版 |
2017/04/06(木) 18:06:11.40ID:7ga4e71i
オブ農って何ですか?
2017/04/06(木) 18:24:59.98ID:FGV9lFi+
>>92
気持ちの伝わるいい返しだな
2017/04/06(木) 18:36:07.83ID:FGV9lFi+
>>89
ストアドは基本SQLだからDB設計出来る程度のリレーショナルモデルの知識あれば十分
技術うんぬん言うほと難しい話じゃない DBが違えば中身はいろいろと違ってくるけどね

ストアドで条件分岐やループやカーソルを多用してる場合
本当にDBレイヤーでやるべき仕事なのか考えたほうがいいと思う
ビジネスロジックのあるべき場所や柔軟性と最適化のバランス次第
2017/04/06(木) 22:21:27.75ID:OOQlb81T
制御文減らすための文法じゃないの?
2017/04/06(木) 23:19:03.66ID:fGciOGwI
>>95
伝わるか! ボケナス!
99デフォルトの名無しさん
垢版 |
2017/04/07(金) 07:14:09.24ID:mWTY/96m
データベースのモデリングした後
オブジェクト指向のために
クラス設計すると、エンティティの
抽出とか同じ事をしている気に
なってくるんですが

モデリングは実はクラス設計だけで
OKとかありますか?
2017/04/07(金) 09:46:16.48ID:xCtKbZyH
>>99
そのためにO/Rマッパーがある。
O/Rマッパーを使うとデータベースのモデリングを
クラスで表現できるから、そのまま移植すれば良い
101デフォルトの名無しさん
垢版 |
2017/04/07(金) 10:24:46.37ID:IERj5jiz
ORマッピングすればDaoなんていらんね
2017/04/07(金) 11:00:36.56ID:Bku+sAks
>>97
意識して減らそうとしないと無理かな
ストアドは、テーブルや索引、マテリアらいずビューとかの整理に使う物かな
要は、あるタイミングでデータベースを単一の主体が加工する場合に使うと便利
複数クライアントが平行して操作するときに共通化を求めてやるもんじゃない。
それは、ビューなりストアドトリガーや制約で共通化するべきもの。
条件分岐があるなら、BLに溶け込ませろってのはそういう意味かと
2017/04/07(金) 11:05:00.66ID:Bku+sAks
ストアドプロシージャは、共有メモリや通信を目的に設計されていない。
なんかの結果を通信用に設けたテーブルに書いて、そのテーブルを別の主体が参照して連動させるとかオーバヘッドが多く、排他が冗長になり、パフォーマンスがでない。
2017/04/07(金) 12:51:44.94ID:l4Q0lLSH
>>95
気持ちのわるいいい返しだな

と読んでしまった
2017/04/07(金) 14:06:58.01ID:IIlb/TvM
>>102,103
基本的に何言ってるかよくわからない。

例えば集約関数実装することを考えれば、元となるデータの通信を行わなくて良い分、
ストアドの方が速い可能性が高い。

また、複雑なデータ処理や文字列操作が多くてストアド自身のコードの実行が遅い場合もあるが、
ストアドに別言語を使えるRDBMSもある。

さらに言えば、ストアドがimmutableであるなどの宣言ができるRDBMSがあり、その場合は
実行結果をキャッシュしてくれたりする(同じ引数の場合はコードを実行しない)。

ビジネスロジックをRDBMS内部におくべきかどうかというのは、また別の話。
2017/04/07(金) 18:38:30.82ID:Er4jaX4h
最初はデータ中心アプローチでいいよ

カージナリティーとかに抜けが発生するからね
それからモデル層の設計すればいい
2017/04/07(金) 19:36:14.64ID:vUIUfIKH
思ったよりスレッド周りで手こずったけど>>8をPHPで書いてみた

http://ideone.com/lcnAEj
108デフォルトの名無しさん
垢版 |
2017/04/08(土) 12:10:05.09ID:gBZ8NF+o
>>105
集約関数、つまりある複雑な条件、複数のテーブルを結合せずに参照し、なんらかの判定を行う。
これは一般的なバッチ処理と言われるもので、データベースインスタンスに閉じて実行すればよい。
何らかのパラメータが伴い、レコードのサブセットのみを対象にする場合、ストアドにしても処理遂行を基準に、倉実行してもパフォーマンスは劇的には変わらない。

データベースは、純粋に取り扱うレコード数に比してパフォーマンスが確定する。

あと、結合できるなら、ストアドはいらない。
ビューなりマテリアルズどビューのがまし
2017/04/08(土) 12:16:30.94ID:AqrMKRmZ
ここ、何のスレだっけ?
2017/04/08(土) 13:06:18.31ID:MgZOgx+n
マルチスレッドわろw
2017/04/08(土) 13:31:56.58ID:D50K8DvF
よくわからないことを喚き散らすやつの隔離スレだよ
2017/04/08(土) 13:51:19.98ID:MmqHTY99
まともにキャットドアもデータベース接続もできないゴミが、僕が使ってる言語のライブラリをだしにしてホルホルするスレだよ
2017/04/08(土) 14:06:38.04ID:FmwPLc4P
お疲れ様でした!
2017/04/08(土) 17:16:52.66ID:6tEdYN6j
>>112
やはりキャットドア問題を解決することなく次にはいけんな
2017/04/08(土) 18:27:20.39ID:ZmPKT6lF
>>108
集約関数もバッチ処理も理解できないやつは
いちからやり直すかプログラミングから足を洗うかしてくれ
2017/04/08(土) 19:54:52.03ID:FmwPLc4P
>>114
あんただけだよいつまでもキャットドア問題とか言ってんの
2017/04/09(日) 01:56:39.35ID:+d/g4xuk
要件の一つに「Oraにロックインされるの勘弁」があるとマッパー必須

……いやなのは「もうOracleにカネ献上するのは嫌なんや!」って奴
既存のストアド見て置き換えなきゃいかんでしょ

最高にクソだったのは1関数5000行if12段のストアド
あれはサジ投げてとりあえずおっつけの改修だけやることにした
2017/04/09(日) 02:27:20.83ID:S92Irkmv
>>117
設計書なかったんだ、ははワロス
2017/04/09(日) 02:34:17.14ID:+d/g4xuk
>>118
設計書がどうこうとかじゃなくて、「おにぎりスタッバー」程度余裕で超えるド畜生
丸尾末広とか風船クラブ級の理解不能レベル

だから俺のところに来たんだろうが、さすがに当座のおっつけ以上の対応はムリだったな
2017/04/09(日) 02:39:11.61ID:+d/g4xuk
むしろ1関数5000行if12段の脅威を感覚でわからんとかヤバいな

最低でも2048くらい分岐が発生する
平均的な人間は7くらいしかわからん(Code Completeを参照のこと)
2017/04/09(日) 02:50:02.23ID:+d/g4xuk
一応言っておくが、俺はWAISテストで引っかかってるんで3か4しかわかんねぇようだ
まぁそのくらいあればシノギはできるようだがね

WAISでググるこたぁなかろうし、ググったらヘイトするんだろうけどな
2017/04/09(日) 08:12:06.51ID:MBRFLDgA
if12段が*最低*でも2048*くらい*分岐って計算の方がヤバい
2017/04/09(日) 08:18:43.92ID:BIX5wjPO
分岐を志向するか統合を志向するかで無能か有能か分かれそう
2017/04/09(日) 08:49:12.98ID:Zg/bzUyC
と言いますと?
2017/04/09(日) 09:36:40.13ID:Ch2od0MN
無理なクラスタリングはハンマー釘病になる
その場その場に応じた最適解を選べばいいだけ
2017/04/09(日) 11:52:37.41ID:cTj84sSr
釘宮病ってなんだ?
2017/04/09(日) 23:56:30.49ID:dNHxTouX
12段ifに於ける1つの分岐
if(a){ if(b){ if(c){ if(d){ if(e){ if(f){ if(g){ if(h){ if(i){ if(j){ if(k){ if(l){
....x;
} else {
....y;
}}}}}}}}}}}}
2017/04/10(月) 00:17:53.55ID:f5bfXI8/
改良版

if(a && b && c && d && e && f && g && h && i && j && k && l) {
....x;
} else {
....y;
}

ここから言いたいことがわかるかね?
2017/04/10(月) 02:17:00.84ID:ogTJ3oaz
>>128
先に言えハゲ
2017/04/10(月) 02:17:56.14ID:f5bfXI8/
はげてねーよはげ
2017/04/10(月) 07:53:31.28ID:1VtPDmxC
>>130
ハゲろ
2017/04/10(月) 08:53:35.90ID:SOLotzzn
ガキかよ...
2017/04/10(月) 12:33:19.05ID:dyJkQ9HN
>>132
うるせー、ハゲ
2017/04/10(月) 13:12:58.61ID:Bu07ZLW6
>>120
ちょっとはまともな文章書けないのかね。

12段ifというのが12個のifということなら、分岐回数は最大で12回。
ネストしない12個のifなら、分岐の組み合わせは2^12=4096個。
>>127のように完全にネストした12個のifなら、分岐の組み合わせは13個。

Code Completeに何が書かれてるのかしらんが、正しく読み取れてないのでは?
2017/04/11(火) 04:41:06.97ID:mchlWSiU
>>134
あーうん、そんなもんだねぇ2048じゃなかったな

キャンパスノートを2冊くらい使ってメモしつつ
デバッグしてもどこでバグってるのかわからんのよ、あれは参った
とりあえず動くようにはしたがエラー系がすげぇ怖いね
後日何も連絡来ないから気にしなくていいんだろうけど

>>134
変数や関数などは、平均的な人間は7個までしか覚えられないから気をつけろよ、
という心理学の知見が公表されているページがあるんよ
136デフォルトの名無しさん
垢版 |
2017/04/11(火) 07:15:24.21ID:8/HzfseJ
物理クラス設計にDTOって書きますか?

一応クラスだしなぁと
悩んでます

流石に論理じゃ不要と思いますが
137デフォルトの名無しさん
垢版 |
2017/04/13(木) 07:07:56.79ID:FYxnOP1R
社員クラスと所属クラスがあって
年月を問い合わせたら
その年月時点での所属を返すように
したいのですが、どちらのクラスに問い合わせるのが正しいと思いますか
2017/04/13(木) 07:18:59.41ID:m/ZfxtWH
おいらなら、社員クラスに所属クラスを埋め込むが。
と言うか、所属はクラスである必要すら感じない。
構造体でよく無いか?
2017/04/13(木) 08:37:21.93ID:UeuCulgt
sql
2017/04/13(木) 09:29:06.54ID:i0SFiNXj
>>137
とりあえず社員クラスと所属クラスと年月の関係を書くように
2017/04/13(木) 11:36:09.37ID:Wjez3hz+
所属クラスって名前でいいのか?
部署クラスとかが普通だと思うな
142デフォルトの名無しさん
垢版 |
2017/04/13(木) 20:19:04.83ID:U0NTTHzz
所属クラスは確かにおかしいですね
部の下にグループがあるので部署という名前は避けたのですが
部署クラスがグループ教えてくれるのはなんら問題ないことに気付いたので部署クラスに改名しました

社員クラスのフィールドには
·社員番号
·氏名

部署クラスのフィールドには
·部署
·部署配下のグループ

としているのですが
所属部署を知りたい時に、社員に今の所属を聞くべきか、部署に社員の所属を教えて貰うのか、どちらが好ましいのかなとお聞きしたくて書きました
2017/04/13(木) 21:34:32.88ID:kfgJyhKZ
>>142
社員がわかっているときは、社員に聞けばいいし、
部署がわかっている場合は、部署に聞けばいい。
どちららでもOKだし、ちゃんと作るならば
どちらからでもできるようにする

これは分かってない人意外と多いんじゃないかと思うけど、
データベース(RDBMSを使わないにしろ)っていうのは、
単体のテーブルの集まりではなくて、全体で一つのデータベースなんだよ

クラスに置き換えていうならば、クラス一つ一つが単独で存在しているのではなくて
クラスとクラス、そしてその関係を定義して、複数のクラスで一つのデータベースを表現する
(ただし設定テーブルのような、他の完全に独立しているテーブルのような例外はある)

だから社員クラスのフィールドには、所属部署というフィールドを持っているだろうし
部署クラスには、所属社員を取得するメソッドが存在している
2017/04/13(木) 22:59:09.23ID:Wjez3hz+
キリッ
2017/04/14(金) 01:10:42.96ID:DK6sdjwT
>>137
どっちでもええ、ダメだったら直すまでだ

JavaのAPIというか一回書いたら半永久的に治せないインターフェースを書いてるわけでもないだろ
あるいは大企業の連中が使ってるイミフなフレームワークか

そんなん言っても満足されないならこのくらい

・社員が子会社に転籍とかフツーにあり得るなら「社員」に持たす、全グループ間で同一のアプリ使ってる前提だが
部署だと会社跨いだら引けなくなる設計になってる可能性もあるんでな
・一社だけなら部署でも社員でもノリで決めていい(多分直せるはずだ)
146145
垢版 |
2017/04/14(金) 01:15:51.93ID:DK6sdjwT
とりあえず目的が「特定の社員の所属状況を引く(あるいは特定社員の在籍履歴を引きたくなって機能追加)」なら
社員に持たすだろうかな
個人のトラッキングが目的なら個人を扱うクラスが責任取るべき

部署に持たすってなら「今日の部署の人員配置状況がわかること」が目的ってことになるんで
2017/04/14(金) 01:21:47.69ID:5G8BkNCQ
>>145
Java関係ないやん
2017/04/14(金) 01:36:29.65ID:DK6sdjwT
>>147
interfaceがうるさい連中の筆頭はJavaっ子なんでなあ
パっと思いついたのがアレだった

ンなんだったらJSRにvar変数提案しろよとも思うのだが(あるいはScalaっぽくするか)
149148
垢版 |
2017/04/14(金) 01:36:57.02ID:DK6sdjwT
varがあればダックタイピングもできるだろうしな
2017/04/14(金) 03:32:44.79ID:DK6sdjwT
もう寝るか

Java8のlambdaなんとかならんもんかねぇ
スレッドのラッパーってのは期待してなかった(高階関数と、関数テーブル用途が使えん)
ドロイド君のイベントに差し込むのには使えようが
151デフォルトの名無しさん
垢版 |
2017/04/14(金) 07:12:34.16ID:n5pL5Dn8
意外とどちらでも良いんですね

モデリング的に部署に聞くのはあり得ないとか言われると思ったのですが

ただ、社員にも部署にも問い合わせ可能なのが好ましいというのは驚きでした 冗長と言われそうで考えになかったもので 参考になります
2017/04/14(金) 07:31:08.07ID:dq/wP8H9
「現実世界」なんて忘れて
153デフォルトの名無しさん
垢版 |
2017/04/14(金) 09:07:05.40ID:aK3T4zVf
>>150
はい?
2017/04/14(金) 21:02:07.32ID:KZAGQEdK
クラス構造に凝っても意味ないじゃん
2017/04/14(金) 23:49:30.63ID:Sw6Rs9Qs
そろそろjavaは遺物扱いで良いんじゃないかって思ってる
2017/04/14(金) 23:57:33.02ID:2Ku103cF
Cobolですら現役なのに

JavaをオワコンにしようとしてるやつはJavaの何が気に入らんのだ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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