オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1uy ◆e6.oHu1j.o
垢版 |
2016/07/09(土) 00:35:13.95ID:Mn3UGZ+O
前スレ
オブジェクト指向システムの設計 171 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1465636703/
2016/08/04(木) 19:08:09.61ID:w6fnMNqO
別に良いけど
innerClass.set_valueが呼ばれて値が変更されたときに
変更されたことをouterClassやmiddleClassに通知する仕組みが必要になるかもしれないよ
この場合、余計にややこしくなる

そのほかのディメリットはカプセル化しないことで発生するディメリットと同じ
2016/08/04(木) 20:37:30.59ID:jTAWnEUa
>>124
O/Rマッパーを使うからそういう処理は
勝手にやってくれる。
2016/08/04(木) 22:17:26.33ID:9BD7w8j0
>>124
更に言えば
実装方法としても、set_valueは分かり難いし楽でも何でもない
あえてやるなら
outerClass.set_value(key, value)とか?
2016/08/04(木) 22:24:04.58ID:dkWDRS+N
>>127
最低のやり方だな
そのk,vのMap、実行するまで完全なブラックボックスになるじゃん
死んで、どうぞ
2016/08/04(木) 23:34:15.07ID:dkWDRS+N
>>127
くっせ〜なホント
こういうペチプ〜崩れの塵屑見ると延髄チョップからのバックドロップ食らわせてやりたくなるわ
まじな。死ね。
2016/08/04(木) 23:36:44.15ID:dkWDRS+N
なんでもarrayにしときゃいいと思ってるド低脳
チンパンジー以下のサルゥ
ほんとつっかえ・・・
2016/08/04(木) 23:37:05.58ID:dkWDRS+N
>>127
血染めの赤にしてやる
死ね
2016/08/04(木) 23:46:15.09ID:dkWDRS+N
>>127
おら何とか言えよゴミ
ID変わるまで逃げるのか?
ほんまつっかえゴミくずやな〜
2016/08/05(金) 07:18:34.18ID:ZdrtHNhg
イコール代入するなら、最後は明示されたセッター呼ぶのは中途半端な気がする。

各クラスにユーティリティメソッド実装できるなら、
outerClass.getNodeFromPath("middleClass.innerClass").set_value(xxx)
とか取得関数持っちゃうと、文字列だけ不細工だけどなんとでもなったりするんじゃないかな。
2016/08/05(金) 10:32:18.42ID:VlcB2rw7
結論
余計なことはするな
135デフォルトの名無しさん
垢版 |
2016/08/10(水) 22:14:29.57ID:UWZg55pn
株式会社TOUAが2016年7月に破産
http://www.tdb.co.jp/tosan/syosai/4191.html
2016/08/11(木) 00:00:42.11ID:0L+mrDki
>>135
派遣会社ってピンハネしかしてないのに潰れるの?
137デフォルトの名無しさん
垢版 |
2016/08/11(木) 00:16:35.15ID:OU7OxTj6
>>136
トウアは仕事をしない、仕事ができない人間を抱えすぎていたのと、資金がもともとないのにオフィスを分散させたり、複数社のグループにしていたせいで効率が悪かった。

これは会社を大きく見せたい人間が社長の会社の典型的なパターン。

中間搾取でも取引先の支払いが遅いと資金が足りなくなって破たんする。

最後はとにかく仕事を増やして乗り切るつもりだったんだろうけど追いつかなかったんだろうな。

プロパーのレベルが低いのは、賢いSIer、ユーザー企業も分かってたし、仕事をここの下請けに丸投げ、押し付けているのも分かるから仕事が取れなくなっていた。

ドコモあたりのアホ企業頼みだった。
2016/09/10(土) 13:15:16.78ID:twqmh/TK
予想通り、誰もいなくなったのね。
2016/09/10(土) 15:03:56.80ID:+QFLkWhC
static Koma.move() の頃がおまいら一番輝いてたね}
2016/09/17(土) 22:40:32.14ID:hd6Wyy09
人の意見を聞かずにバッサリ切り捨てる、典型的な2ch脳な人が
のさばり出した時点で離れた。
2016/09/19(月) 10:09:43.20ID:bJUofi69
それぞれに結論がでてる状態なんだろ?
俺も一連のやりとりでオブジェクト指向ってやっぱりクソだなって再認識した
2016/09/19(月) 11:03:13.57ID:KUojTFe6
やっぱり誰でもわかる手続き型がナンバーワン
2016/09/19(月) 12:18:29.50ID:0K/woKyj
手続き型は誰でもわかるが工数が多すぎてな
ビジネスでやる以上工数は節約しなきゃ
2016/09/19(月) 12:59:11.35ID:KUojTFe6
誰でもわかる明朗なコードを書かなくてはいけない
ビジネスだからこそ、手続き型がナンバーワン
ビジネスは君の趣味ではない
2016/09/19(月) 13:02:51.87ID:xTk+6xzH
ビジネスだからこそお荷物は解雇しなきゃならない
ある程度の能力のある人間が工数を減らせる手法で開発する
工数の掛かる手続き型しか書けない読めない人は解雇するべきビジネスだから
2016/09/19(月) 13:08:18.37ID:KUojTFe6
趣味をビジネスに持ち出すオタクはNGですよ、これ常識w
2016/09/19(月) 14:10:27.86ID:VkQagIEW
成長しない新米プログラマをいつまでも傭い続けるわけにはいかない
ビジネスってさボランティアじゃないんだよね
2016/09/19(月) 14:18:05.63ID:KUojTFe6
で、君らはまたstatic final Koma.move(int kyori)すんの?
2016/09/19(月) 14:29:03.47ID:AFsKEmAF
回り将棋ならいいかもしれない
150デフォルトの名無しさん
垢版 |
2016/12/27(火) 23:00:43.33ID:DbM4OtJE
ViewModelってどのレイヤーに属するんだ?
Viewに関する知識はないからUIレイヤーではないだろう
ビジネスルールに関する知識は必要だからドメインレイヤー?
2016/12/27(火) 23:06:49.29ID:+TUrL10Q
UIレイヤーの中のドメインレイヤーとの境界面、じゃないの
2016/12/27(火) 23:10:35.70ID:+TUrL10Q
あ、あとViewModelに必要な知識はビジネスルールじゃなくて
ドメインレイヤーのインターフェースだけじゃないのかな?
ビジネスルールに関することはモデル内で処理するべきだと思って作ってるけど…
2016/12/27(火) 23:37:51.54ID:DbM4OtJE
>>152
俺も最初はそう思ってたけど現実にそれではうまくいかなかったんだ

Hoge
x
y
z => sqrt(x * y)
このエンティティはビジネスルール上の不変条件としてx * y >= 0でなければならないとする
普通ならxとyのセッターで不変条件を監視して不正ならすぐに例外を投げる実装になる
ドメインレイヤーのModelって基本的に全てこんな感じ

でもViewModelでは不変条件を常には満たさなくてもいい
その代わり不変条件を満たしていない事を検知する方法が必要って感じになると思う
つまりこんな感じ
HogeViewModel
x
y
z => x * y >= 0 ? sqrt(x * y) : null
hasError => x * y < 0
xとyのセッターでは不変条件の監視をしないで不正な値も受け入れる
ただし不正な状態ではhasErrorが真になる
xとyは入力コントロールに、zは出力コントロールにバインドされる
hasErrorはエラーアイコンやコントロールの色にバインドされる

両者はビジネスルール的には同じ事を表現しているはずなんだけどドメインModelとViewModelでどうしても別々の実装になってしまう
ViewModelからドメインModelを参照するだけではうまくいかないしどうしてもViewModelにビジネスルールが染み出してしまう
2016/12/28(水) 00:02:52.91ID:KMmXCa3M
自分は個人で作ってるだけで好きなようにやれるからだけど、
そういう場合、自分はxもyもそのままモデルに投げてその処理はいったんそこで終わり。
モデルで値をチェックしてエラーならエラーイベント発生
→入力用ViewModelがそのイベントを受け取ってViewに伝えるDataErrorイベント発生
→Viewが変化

zについても、モデルから受け取ったPropertyChangedイベントをViewに中継するだけにする、かな…

あくまでも、x,yの値によってモデルが例外を投げないように自分で作れるからだけど…
2016/12/28(水) 20:24:38.28ID:b06lzq40
限界あるな
xにうんこって入れられても一旦は保存するってことだろそれ
まさにクソまみれ
2016/12/28(水) 21:08:30.55ID:YF6A9Wev
ViewModelが勝手に「これはうんこだ!捨てておこう!」「これはうんこじゃない!大丈夫だ!」
なんてやってる方が、いずれシステムがうんこまみれになる危険が高い気がするが…

人間だって、目がうんこの反射光をとらえて、視神経がそれを脳に伝えて、
そして最後に脳が「うんこだ!汚い!」ってやるんだから
Modelが「うんこだ!汚い!」と判断するまで、
ViewやViewModelが入力情報をそのまま伝えていくことを
「うんこを一旦保存」とかとらえるのはおかしいと思うんだけどな…
2016/12/28(水) 21:55:12.03ID:b06lzq40
>>156
じゃあ超長い文字列とかも一旦は保存するんだろ?
思想に限界があるって気付けよ
2016/12/28(水) 22:03:00.40ID:b06lzq40
そもそも画面仕様が専用であるはずなのに
データ型のみModel依存ってこだわりがうんこ
画面なんか内部も含めて作り捨て上等だろ
2016/12/28(水) 22:06:08.16ID:b06lzq40
次の変更は一度にたくさん入力したいのでExcelかcsvから読み込んでもらえますか?
だったら一生懸命付けた汎用性もm9(^Д^)プギャー
2016/12/28(水) 23:01:11.92ID:gapvLjp6
画面の検証は入力長、上下限、正規表現など簡単なものだけ採用する
自動計算項目も簡単なものだけを採用する
例えば金額と税率から税込価格を自動計算するとか商品コード入力したら商品名取ってくるとかその程度で我慢する
画面の検証や自動計算項目はあくまで入力支援が目的なのでビジネスルールに完全に遵守する必要はない
ビジネスルールを厳密に守らなければいけないのはアプリケーションサービスインターフェースより向こう側だけ
アプリケーションサービスの内部で画面か受け取った入力内容をドメインモデルにマップしてそこで本気の検証や計算を行う
2016/12/29(木) 00:14:19.42ID:5yPVbf0y
一切関知すべきじゃないな。
うんこかもしれないもの、としてVM以降に渡して、うんこではないものを貰うしか無い。
2016/12/29(木) 00:36:39.28ID:BD9K+jOv
それだと使い勝手は悪くなるな
2016/12/29(木) 02:16:04.01ID:ZpKqxRRa
>>161
小数じゃないのに小数点が入力できちゃったり
マイナス値なんて取らないのにマイナスが入力できちゃったり
全角なんて入力してほしくないのに全角で打てちゃったり
ファイルパスを入力して欲しいのにパスに入力できない文字が入る
その状態でファイルオープンダイアログ開いたら死ぬの?とか
素人丸出しアプリだな
visualstudioでプロパティいじれば解決する話をわざわざコードで記述してバグる超絶欠陥製品にしかならないだろうね
すべての値のチェックを入口で退治するんではなくて一度保持してしまうから問題を拡散している
undoしたらどこの値に戻るの?それ
2016/12/29(木) 02:36:25.34ID:RruPXahs
>>163
何を誤解してるかわからんが、それは、ビューモデル以外の場所で即座に否定されたり、是正されたり、これはは間違ってますよとエラーと判定されるから、
ビューモデルは、判定結果をおとなしく持って、ビューにレンダリングしてもらうだけじゃん。

お前がやってんのは、それはVMの仕事じゃない。
2016/12/29(木) 08:38:21.22ID:ZpKqxRRa
>>164
だからさ
その構造を実現することになんの意味があるのって話
2016/12/29(木) 10:19:02.48ID:BD9K+jOv
>>163
そういうのは大前提としてやった上での話だよ
整数入力コントロールには指定した桁数いないの数字しか入らない(アルファベットなどはキーを押しても入力されない)
その上でビューモデルにどこまでビジネスルールの知識を与えるか、ドメインモデルとの違いはなんだ、という議論をしている
2016/12/29(木) 10:37:25.80ID:vPLPY1D6
>>165
データを処理する処理に徹することができるのと
データを描画する処理に徹することができるんじゃん。
2016/12/29(木) 11:35:18.82ID:3hi3YdfK
>>167
現実にはできなくて、やるメリットもあまりなくてって状況だと思うけど
2016/12/29(木) 11:43:36.53ID:3hi3YdfK
>>166
だったら内部の仕様も画面にべったりなんでしょ?
今更分離して何がしたいの?
2016/12/29(木) 11:49:35.65ID:3hi3YdfK
はっきり言ってしまうと経験が浅いから掲げる理想が陳腐
大規模DBとそれを操作するインターフェイスを真似たモデルであれば
画面なんてプロジェクトごと作り捨て上等なんだよ
DBはもう誰も仕様変更を入れられない
画面は実現したい内容によって完全廃棄もありうる
これが現実なんだよ
2016/12/29(木) 12:03:50.76ID:orpg8/1p
>>169
VとMVの分離のメリットなら2つ大きいのがある
1. UIの状態数の最小化
2. 手続型から宣言型への移行
2016/12/29(木) 12:23:28.51ID:orpg8/1p
>>170
画面を使い捨てる前提ならますます分離した方がいい
ひと昔前はViewにビジネスロジックが当たり前のように書かれていた
こういう画面は本当に使い捨てていい画面なのか判断が難しい
画面を使い捨てる前にリファクタリングを行いビジネスロジックを抽出して分析しなければならなかった
必要なビジネスロジックは残して別の画面から利用するように変更しなければならない
この作業が全てうまくいけばようやっと画面を使い捨てる事が許される
2016/12/29(木) 13:00:59.69ID:3hi3YdfK
だからさ
現実にはできないじゃん
ちょっと突っ込まれるだけでボロボロ抜けが出てくんだから
2016/12/29(木) 13:23:47.48ID:orpg8/1p
>>173
最近はちゃんと分離されているシステムが増えてきてる
2016/12/29(木) 13:26:05.73ID:3hi3YdfK
>>174
誰の周辺の話なの?
2016/12/29(木) 13:36:40.64ID:orpg8/1p
>>175
世界的に
2016/12/29(木) 19:34:31.18ID:AIw2bcpm
>>168
割と大規模やってるけど、気合でWPFに移行してからそこそこうまく行ってるよ。
出来なくて切った会社は沢山あった。
2016/12/29(木) 22:28:45.06ID:ZpKqxRRa
>>177
そんな多大な犠牲を払ってようやくできたのか?(笑)
設計ってみんながわかりやすくするためにするもんじゃないの?
選ばれし者しかできない時点で失敗してるんだよ
わかる?
2016/12/29(木) 23:34:45.76ID:5yPVbf0y
>>178
莫大な犠牲は下請けが払ったんだと思うよ。
選ばれしものしかできないとは思わないが、
選ばれしものが出来ないのはある程度あるんじゃないの?
馬鹿とか。
2016/12/30(金) 01:32:03.00ID:JXfD++Nt
>>179
何のための画面と内部の分離だったの?
メリットが見えない
選ばれし者しか理解できないソースと組んだやつしか読めないソースの品質の違いが俺にはさっぱりわからないよ
2016/12/30(金) 08:31:43.34ID:fHdmB1av
>>180
前者は選ばれしもの(といってもWPF程度なら並みのプログラマで十分なので選ばれしもというのは大げさだが)なら超低コストで保守できる
後者は書いた本人も含めて保守に膨大なコストがかかる
このようにコストが全く違うわけだけど何故同じと思ったのか理解し難いね
メリットが見えないんじゃなくて見えないフリしてるだけだろきみは
2016/12/30(金) 09:27:05.84ID:0uD1Maua
インスタンスメソッドは選ばれしものにしか使えないから
全てスタティックメソッドにしなさい
ってことですか?
2016/12/30(金) 09:41:15.14ID:U2S2spdu
>visualstudioでプロパティいじれば解決する
あーダメダメ
2016/12/30(金) 09:55:02.42ID:G92pvYFd
できるヤツができないヤツに合わせる必要はない
退化する
2016/12/30(金) 10:07:30.36ID:0uD1Maua
スタティックお兄さん爆誕
古き良きプログラミングの時代、復活の刻
2016/12/30(金) 10:21:30.65ID:JXfD++Nt
>>181
え?でもいまの状態で画面と内部の分離ができてないじゃん
値のチェック前に一旦値を保存するんだよね?
内部に問い合わせないとチェックする内容がわからんから
偉そうなこと言ってるけどできたもんはゴミじゃん
2016/12/30(金) 11:02:39.37ID:fHdmB1av
>>186
保存ってどこから出てきたんだ?
2016/12/30(金) 11:28:27.74ID:zvHkIzW0
>>187
このスレよく読んでからレスしてね
2016/12/30(金) 12:14:51.41ID:tYlkXQKT
ViewModelからModelに入力値の通知を行うことを「保存」と呼ぶ頭のおかしい人が約1名いるだけ
190デフォルトの名無しさん
垢版 |
2016/12/30(金) 15:13:10.80ID:NIWDNqpS
なるほど
どうりで話が通じんわけだ
2016/12/30(金) 15:29:32.71ID:7Zd5OH2Q
>>180
画面直すのかデザイナさんにもできる、
ロジック直すのが画面に一切影響しない事を謳ってプログラマだけで出来る。
これ大規模だと結構大きいよ。デザイナさんに動いてもらうのそこそこかかるし。

>>186
一旦保存って何かわからん。VMの変数に持つよね、って事?
VMの変数に持とうがなんだろうが、入力値と使用値と出力値が同じ所(例えばテキストボックス)に表示されるのは、そもそもが事故の元だよ。
2016/12/30(金) 15:44:27.69ID:zvHkIzW0
>>191
はぁ?
なんのこと喋ってるの?
ちゃんと理解してからレスしてね
2016/12/30(金) 15:52:05.62ID:7Zd5OH2Q
>>192
>>177
で発端にすらなってるから、理解はしてるが。
アホなのかな。
2016/12/30(金) 21:13:04.65ID:0uD1Maua
なぜオブジェクト指向の設計の話になると喧嘩になってしまうのか?
やはり関数型にすべきでないのか?
2016/12/30(金) 22:35:50.28ID:VqDrYuY4
>>194
モナドを許すか許さないか論、原始再帰関数の定義の喧嘩になるのがオチ。
手続きとしてCPUが処理している所に別のパラダイム持ち込むとこうなるし、
関数としてGPUが処理している所に手続きを持ち込むと同じように異論は出てくる。
196デフォルトの名無しさん
垢版 |
2016/12/30(金) 22:36:08.50ID:KB0M7zpX
喧嘩がなくなるなら関数型喜んでつかうわ
2016/12/30(金) 22:54:38.14ID:G92pvYFd
工数の少ない方を採用するなぁ
何が何でもオブジェクト指向!ってのは手段が目的になっちゃってるように感じる
2016/12/30(金) 23:59:17.50ID:0uD1Maua
感情をイミュータブルにしましょう
2016/12/31(土) 07:44:43.00ID:XK+xRs9l
工数最小マンって無責任だと思うよ
保守は他人がやるからラピッドでええやんってクズばかりだから業界全体が停滞してるんだよ
多少工数が増えてもエレガントなOOPで作るべきだ
というかそもそも工数ベースで見てもOOPの方が優位だけどな
2016/12/31(土) 08:26:58.81ID:qTR6JDNw
工数最小≠OOP
って、どっから沸いてきた式だよ
コンパイル通らないぞハゲ
2016/12/31(土) 10:34:26.84ID:H2pBZ8ZG
>>199
ん?でもさぁ
汎用性つけまくった挙句に次の変更が来なかったら汎用化にかけた工数は無駄じゃない?
2016/12/31(土) 11:05:14.41ID:XK+xRs9l
>>201
汎用性と保守性を混同するのは初心者にはありがちだけど全く別のものだぞ
OOPはまず保守性を高めてくれるってのが主だ
結果として見ると汎用性もオマケで付いてくる場合が多いってだけだ
2016/12/31(土) 11:40:12.70ID:I0WFUQzY
>>202
そもそもOOPだと何で保守性上がるの?
2016/12/31(土) 12:13:13.06ID:3aGn9kAy
粗結合の徹底→モジュール化→単体テストしやすさ、古くなった部分の可換性
2016/12/31(土) 12:24:49.69ID:XK+xRs9l
>>203
SOLIDを実践しやすいから
モデルを忠実にコードに反映できるから
2016/12/31(土) 13:03:52.81ID:I0WFUQzY
>>204
OOPならではの部分を強調してほしかったが
疎結合とモジュール性についてまっさきに触れているので結果的に好感触

>>205
聞いて損した
2016/12/31(土) 13:15:07.39ID:XK+xRs9l
>>206
俺も答えて損した
馬の耳になんとかってヤツだね
2016/12/31(土) 13:18:39.21ID:I0WFUQzY
なんかごめんね…
2016/12/31(土) 14:00:22.29ID:XK+xRs9l
>>208
反省しろよ
2016/12/31(土) 15:09:26.22ID:2Xzfkrwi
>>209
おまえもな
2016/12/31(土) 16:41:13.08ID:n5yZbU99
>>210
消えろ
ぶっ飛ばされんうちにな
2016/12/31(土) 17:32:21.84ID:2Xzfkrwi
>>211
おまえもな
2016/12/31(土) 17:32:59.43ID:qTR6JDNw
>>211
あんまり調子こいてると手続き型にするぞ?
2016/12/31(土) 17:37:54.48ID:I0WFUQzY
もういいから
2016/12/31(土) 17:40:02.54ID:YOFqYiBF
工数気にするのって完全受注型で自分とこで商品開発できないようなところだろうなと思うわ
2017/01/01(日) 00:00:05.99ID:7qccLNYe
採算度外視で開発とかないわ
217デフォルトの名無しさん
垢版 |
2017/01/06(金) 17:03:12.17ID:rigfFBS6
オブジェクト指向の良書教えて
2017/01/06(金) 17:25:52.39ID:A0+jLhsU
>>217
http://echo.2ch.net/test/read.cgi/tech/1467992113/
2017/01/06(金) 20:45:05.38ID:8EHemPmg
ループかよ
2017/01/07(土) 11:22:42.01ID:IG42UiTG
>>204
手続き型でもできる。
というよりオブジェクトみたいに状態に注目するより
メッセージやメソッド、関数に注目するほうが自然な場合もある。
まあオブジェクト脳だとそういった処理をまとめたクラスを作るんだろうけど。
2017/01/07(土) 12:04:44.28ID:kXk28A5p
>>220
具体例は?
2017/01/07(土) 13:39:47.70ID:u/YaKAHu
 サ ー ビ ス ク ラ ス
2017/01/07(土) 21:45:21.54ID:6fDgBl5y
>>220
> 手続き型でもできる

それはとても興味深い指摘です。後学のため、
これぞ手続き型の(つまり「そこまでやったらもはやOOP」とは言わせない、そういった小細工のない)
コードで実演してみてもらうことはできますか?
2017/01/07(土) 23:48:37.74ID:8zzGw/ml
そもそもオブジェクト指向にメリットなんかないのにやり方がわからないとかさっさと廃業しろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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