前スレ
オブジェクト指向システムの設計 171 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1465636703/
探検
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1uy ◆e6.oHu1j.o
2016/07/09(土) 00:35:13.95ID:Mn3UGZ+O656デフォルトの名無しさん
2017/07/19(水) 21:48:22.18ID:ytbmAMvR657あ
2017/07/19(水) 22:54:49.71ID:PC/qPmp3658あ
2017/07/19(水) 22:59:30.27ID:PC/qPmp3 >>651
注文日オブジェクトって何者なの?
正規化しすぎたRDBみたいな話じゃん。
そんな意味のあるようで無いデータ、共通参照したら死人が増えるだけでは?
「何日以内」って誰が持ってる設定値で、誰がそれ使って処理するの?注文日オブジェクト?
密すぎると思う。分離できてそうで、全くどれも単独で存在できないじゃん。
注文日オブジェクトって何者なの?
正規化しすぎたRDBみたいな話じゃん。
そんな意味のあるようで無いデータ、共通参照したら死人が増えるだけでは?
「何日以内」って誰が持ってる設定値で、誰がそれ使って処理するの?注文日オブジェクト?
密すぎると思う。分離できてそうで、全くどれも単独で存在できないじゃん。
660デフォルトの名無しさん
2017/07/19(水) 23:18:58.09ID:lxe5FWzj >>655
よろしく
よろしく
661デフォルトの名無しさん
2017/07/19(水) 23:23:06.03ID:HXXCFkzn 話は変わるが、お前らこういうコード書いたらダメだからな
if (order.cancelable()) {
order.cancel()
}
例外はなんにでもあるからそのことについてコメントはしないが、
この場合キャンセル可能と判明した直後にキャンセル不可能になる可能性がある。
if (order.cancelable()) {
sleep 1日
order.cancel()
}
とやれば理由がわかるだろう。
これが正しい書き方だからな
try {
order.cancel()
} catch(e) {
キャンセルできない場合の処理
}
if (order.cancelable()) {
order.cancel()
}
例外はなんにでもあるからそのことについてコメントはしないが、
この場合キャンセル可能と判明した直後にキャンセル不可能になる可能性がある。
if (order.cancelable()) {
sleep 1日
order.cancel()
}
とやれば理由がわかるだろう。
これが正しい書き方だからな
try {
order.cancel()
} catch(e) {
キャンセルできない場合の処理
}
662デフォルトの名無しさん
2017/07/19(水) 23:33:07.83ID:8lSN/EDp >>658
>「何日以内」って誰が持ってる設定値で、
>誰がそれ使って処理するの?
たとえば注文日オブジェクトが
期限日を判定するメソッドの形で持つ
キャンセルがそれを参照する
もっとていねいにやるなら
注文日オブジェクトの値から
期限日オブジェクトを生成して
キャンセルは期限日オブジェクトだけ参照するとか
どれくらいの粒度でやるかは
実際の処理がどれくらい複雑かによる
>密すぎると思う
それはたんにひとつのクラスで
何でもやることを密だと思ってない感想
>共通参照したら死人が増える
逆、逆
構造化だと修正に弱いから
仕様変更に対応できなくてデスマになる
>「何日以内」って誰が持ってる設定値で、
>誰がそれ使って処理するの?
たとえば注文日オブジェクトが
期限日を判定するメソッドの形で持つ
キャンセルがそれを参照する
もっとていねいにやるなら
注文日オブジェクトの値から
期限日オブジェクトを生成して
キャンセルは期限日オブジェクトだけ参照するとか
どれくらいの粒度でやるかは
実際の処理がどれくらい複雑かによる
>密すぎると思う
それはたんにひとつのクラスで
何でもやることを密だと思ってない感想
>共通参照したら死人が増える
逆、逆
構造化だと修正に弱いから
仕様変更に対応できなくてデスマになる
663デフォルトの名無しさん
2017/07/19(水) 23:36:30.58ID:8lSN/EDp664デフォルトの名無しさん
2017/07/19(水) 23:40:49.25ID:747RlNYZ わかってないなあ
665デフォルトの名無しさん
2017/07/20(木) 00:13:09.93ID:zy040NCi >>664
回答まだ?
回答まだ?
666あ
2017/07/20(木) 08:44:25.42ID:bw5c+A+a >>662
期限を判定するメソッドには注文日オブジェクトが必要、
期限日は別にオブジェクトとして期限日オブジェクトが必要。
それCOBOLなんかでよくあるメタテーブルとかわらんくない?
一つのクラスでやらんよ。ジョブランナーはひとつだが、例で挙げたOperaionごとに、は別クラスというか、タスクとしてアクター最初から作る。
どのOperationだとどのアクターか、ってのはジョブランナーしか本来は知ることができないものでしょ。
毎年会計周りは変わるシステムだったけどデスマ起こったことほとんどないよ。
会計屋は、会計する以外のタスク持ってないんだから。
>>663
注文がEntityなのがわからん。何故?
注文日をValueにしたからでは?
期限を判定するメソッドには注文日オブジェクトが必要、
期限日は別にオブジェクトとして期限日オブジェクトが必要。
それCOBOLなんかでよくあるメタテーブルとかわらんくない?
一つのクラスでやらんよ。ジョブランナーはひとつだが、例で挙げたOperaionごとに、は別クラスというか、タスクとしてアクター最初から作る。
どのOperationだとどのアクターか、ってのはジョブランナーしか本来は知ることができないものでしょ。
毎年会計周りは変わるシステムだったけどデスマ起こったことほとんどないよ。
会計屋は、会計する以外のタスク持ってないんだから。
>>663
注文がEntityなのがわからん。何故?
注文日をValueにしたからでは?
667デフォルトの名無しさん
2017/07/20(木) 10:39:07.21ID:3fjdXCU7668あ
2017/07/20(木) 12:03:30.26ID:bw5c+A+a669デフォルトの名無しさん
2017/07/20(木) 13:34:14.05ID:3fjdXCU7 >>668
> 例外の種類増えないって保証も無いし
例外クラスは基底クラスでcatchできるということは理解してるか?
> 事実上はCancelを変えると、一旦全体の動作が保証できない状態に陥るかと。
Order自身は、正しくキャンセルできたかできなかったかのどちらかでしかないから、
全体の動作は変わらないと思うが
> そこからテストするんだろうけど、まず全体のテスト定義書き換える事になるから、全体のテスト定義の定義にあたる要件定義からテスト起こし直しでは?
> 自動テストかけられる方向で修正したくない?
ちょっと意味がわからない
> 例外の種類増えないって保証も無いし
例外クラスは基底クラスでcatchできるということは理解してるか?
> 事実上はCancelを変えると、一旦全体の動作が保証できない状態に陥るかと。
Order自身は、正しくキャンセルできたかできなかったかのどちらかでしかないから、
全体の動作は変わらないと思うが
> そこからテストするんだろうけど、まず全体のテスト定義書き換える事になるから、全体のテスト定義の定義にあたる要件定義からテスト起こし直しでは?
> 自動テストかけられる方向で修正したくない?
ちょっと意味がわからない
670あ
2017/07/20(木) 18:21:23.58ID:bw5c+A+a671デフォルトの名無しさん
2017/07/20(木) 18:30:59.84ID:3fjdXCU7 >>670
> 基底クラスでキャッチとか常識的に考えて、まともなシステムではありえないだろ。
いやちょっと根本認識が違いすぎて、何をいいたいのかよくわからん
君のソースには、catch () {}が10個くらい並んでるのか?
> Orderが正しくキャンセルされたか、って、キャンセルすることができるか以上に正しくが未定義すぎる。
キャンセルが完了するかしないかの二択でしょ(それ以外に致命的な以上による例外を含めれば三択だが)
キャンセルできないパターンが多少増えても、全体で見れば変わってないでしょ
> 自動テストのくだり。
> 今までのロジックに一切手を加えていなくて、かつ、お互いが疎であれば、今回分の増分のテスト作って実施しつつ、過去のテストをそのまま実行すりゃ良いじゃん。
> 呼び出す、みたいな形だと、呼び出してる側のテストまで作り直しじゃん。
まじで何を言っているのかわからんのですが
コードで説明して
> 基底クラスでキャッチとか常識的に考えて、まともなシステムではありえないだろ。
いやちょっと根本認識が違いすぎて、何をいいたいのかよくわからん
君のソースには、catch () {}が10個くらい並んでるのか?
> Orderが正しくキャンセルされたか、って、キャンセルすることができるか以上に正しくが未定義すぎる。
キャンセルが完了するかしないかの二択でしょ(それ以外に致命的な以上による例外を含めれば三択だが)
キャンセルできないパターンが多少増えても、全体で見れば変わってないでしょ
> 自動テストのくだり。
> 今までのロジックに一切手を加えていなくて、かつ、お互いが疎であれば、今回分の増分のテスト作って実施しつつ、過去のテストをそのまま実行すりゃ良いじゃん。
> 呼び出す、みたいな形だと、呼び出してる側のテストまで作り直しじゃん。
まじで何を言っているのかわからんのですが
コードで説明して
672デフォルトの名無しさん
2017/07/20(木) 18:45:26.11ID:3fjdXCU7 つか、依存しているオブジェクトの変更が、依存する側に影響しないようにするのが基本で、
例えばSOLIDの原則とかがあるんだろ
なんでCancelを変更したら、全体に影響するんだよ
そりゃ設計が悪いとしか言えんわ
例えばSOLIDの原則とかがあるんだろ
なんでCancelを変更したら、全体に影響するんだよ
そりゃ設計が悪いとしか言えんわ
673デフォルトの名無しさん
2017/07/20(木) 18:52:06.11ID:3fjdXCU7 例外もそう
勝手に既存の例外クラスツリー/群と全く関係ない例外クラスなんか作るなよ
Validatiorライブラリ作ってるんなら、
class ValidatorException extends RuntimeException {}
を継承したOutOfBoundsValidatiorExceptionを追加しろ
で、Validatorライブラリのクライアントは、基本的にはValidatorExceptionかRuntimeExceptionをcatchしろ
勝手に既存の例外クラスツリー/群と全く関係ない例外クラスなんか作るなよ
Validatiorライブラリ作ってるんなら、
class ValidatorException extends RuntimeException {}
を継承したOutOfBoundsValidatiorExceptionを追加しろ
で、Validatorライブラリのクライアントは、基本的にはValidatorExceptionかRuntimeExceptionをcatchしろ
674あ
2017/07/20(木) 19:25:21.13ID:bw5c+A+a >>671
え?どー言うこと?Exceptionなんかでトラップしたら静的解析にすら怒られるだろ。
FileNotFoundExceptionなのか、とかトラップして、定義外はアプリケーションレベルのハンドラまで飛んでプロセス殺すよ。
それでも既に3択じゃん。
キャンセルには、キャンセル後に承認が必要になった、なんてときには、キャンセル呼んでる所全部直してくの?
キャンセル出来た訳ではなくなるよ。キャンセル処理は完了したんだろうけど。
そもそも正常系を例外で処理すんな。
テストの事。
....cancel()が、メソッドで、かつ、例外を吐くならば、
呼び出し元のtry-catchやってる、例えばCartやらUserやら、そのクラスも必ず再試験でしょ。
CardやらUserを再試験するならば、システム全体の結合試験もやり直しだわな。
かつ、その試験仕様は、要件が変わったんだから、試験仕様やソース以外からつくる他ないだろ。
サブシステムやデータクラスの問題が、システムの問題になる。
例外吐くんだから。例外って端的に言えば大域ジャンプだぞ。
>>673
アホか。
え?どー言うこと?Exceptionなんかでトラップしたら静的解析にすら怒られるだろ。
FileNotFoundExceptionなのか、とかトラップして、定義外はアプリケーションレベルのハンドラまで飛んでプロセス殺すよ。
それでも既に3択じゃん。
キャンセルには、キャンセル後に承認が必要になった、なんてときには、キャンセル呼んでる所全部直してくの?
キャンセル出来た訳ではなくなるよ。キャンセル処理は完了したんだろうけど。
そもそも正常系を例外で処理すんな。
テストの事。
....cancel()が、メソッドで、かつ、例外を吐くならば、
呼び出し元のtry-catchやってる、例えばCartやらUserやら、そのクラスも必ず再試験でしょ。
CardやらUserを再試験するならば、システム全体の結合試験もやり直しだわな。
かつ、その試験仕様は、要件が変わったんだから、試験仕様やソース以外からつくる他ないだろ。
サブシステムやデータクラスの問題が、システムの問題になる。
例外吐くんだから。例外って端的に言えば大域ジャンプだぞ。
>>673
アホか。
675デフォルトの名無しさん
2017/07/20(木) 19:37:01.08ID:XDbsbGlQ 例外は極力クラス内で殺したい
モノによったらゼロは難しいかもしれんけど外に迷惑かけたらやばい
プログラムの例外を逃がすだけでリアルの俺が殺される
モノによったらゼロは難しいかもしれんけど外に迷惑かけたらやばい
プログラムの例外を逃がすだけでリアルの俺が殺される
676デフォルトの名無しさん
2017/07/20(木) 20:48:26.88ID:buuqmr6G >>667
同じことの繰り返しになるから
ひとつだけ言うと
>Entity, ValueObuect, Serviceの話だよ
Value Object はメソッドを持つよ
データと処理をカプセル化する
Services は処理専門だけど
Entity と Value Object だけで扱いづらいものだけ
Services を例外的に適用するのであって
Value Object をメソッドを持たない
たんなるデータの入れ物にして
Services から処理するのは
手続き的なアンチパターンで
DDDのやり方ではない
同じことの繰り返しになるから
ひとつだけ言うと
>Entity, ValueObuect, Serviceの話だよ
Value Object はメソッドを持つよ
データと処理をカプセル化する
Services は処理専門だけど
Entity と Value Object だけで扱いづらいものだけ
Services を例外的に適用するのであって
Value Object をメソッドを持たない
たんなるデータの入れ物にして
Services から処理するのは
手続き的なアンチパターンで
DDDのやり方ではない
677デフォルトの名無しさん
2017/07/20(木) 22:30:58.38ID:mEIqzc+z インスタンス生成の処理は
ファクトリに隠蔽すれば
クライアントは依存関係や
コンストラクタについて知らなくてもいい
これ意味わからん
コード書いてみてよ
ファクトリに隠蔽すれば
クライアントは依存関係や
コンストラクタについて知らなくてもいい
これ意味わからん
コード書いてみてよ
678デフォルトの名無しさん
2017/07/20(木) 23:38:17.62ID:1m8bkM5u よくわからんが、order.cancel(); が出来るってことは
orderオブジェクトはそのメンバにシステムへのリンクを持ってるってことか?
class order
{
system s;
void cancel()
{
s.cancel( this );
}
};
↑これなんかすごく筋悪くね?
system.cancel(order);
で良くね?
cancelの処理がオーダーだけで完結するとは思えんし
俺の中でorderがレシーバーとなってcancel処理っていう発想がない
で、order.is_cancelable(); も何か変で、キャンセルできるかどうかは
orderクラスだけで決まることではないし、キャンセルできるかどうかのフラグを
orderに持たせていちいち更新するのも変な話だな
そもそも、orderが何でそんなこと知ってるんだ
ただ、キャンセル中かどうかなどのステート値はorderに持たせて良いと思うけど
他に置き場ないし
orderオブジェクトはそのメンバにシステムへのリンクを持ってるってことか?
class order
{
system s;
void cancel()
{
s.cancel( this );
}
};
↑これなんかすごく筋悪くね?
system.cancel(order);
で良くね?
cancelの処理がオーダーだけで完結するとは思えんし
俺の中でorderがレシーバーとなってcancel処理っていう発想がない
で、order.is_cancelable(); も何か変で、キャンセルできるかどうかは
orderクラスだけで決まることではないし、キャンセルできるかどうかのフラグを
orderに持たせていちいち更新するのも変な話だな
そもそも、orderが何でそんなこと知ってるんだ
ただ、キャンセル中かどうかなどのステート値はorderに持たせて良いと思うけど
他に置き場ないし
679デフォルトの名無しさん
2017/07/20(木) 23:39:43.75ID:1m8bkM5u 主従関係が逆転した考え方は嫌いだな
プログラムは明確にトップダウンなほうが読みやすい
手続き型プログラムにはデータ構造と制御構造の二要素しかないんだから
それぞれ組み立てたうえで、それらをどのように割り振るかってことだけ
考えとけば変なことになりようがないと思うんだけど
あと「誰が処理するべきか」って発想がダサくて、そりゃ誰かと問われれば
処理するのは何時でもコンピュータだわな
そうじゃなくて、本来は 「どこへ書くべきか」 だろ?
発想の転換というか、本来のあるべき考え方を取り戻すというか
現実を正しくとらえないとな
プログラムは明確にトップダウンなほうが読みやすい
手続き型プログラムにはデータ構造と制御構造の二要素しかないんだから
それぞれ組み立てたうえで、それらをどのように割り振るかってことだけ
考えとけば変なことになりようがないと思うんだけど
あと「誰が処理するべきか」って発想がダサくて、そりゃ誰かと問われれば
処理するのは何時でもコンピュータだわな
そうじゃなくて、本来は 「どこへ書くべきか」 だろ?
発想の転換というか、本来のあるべき考え方を取り戻すというか
現実を正しくとらえないとな
680デフォルトの名無しさん
2017/07/20(木) 23:45:13.58ID:mEIqzc+z 俺が全てを知ってるんだから
俺オブジェを作ろう
ore.god
俺オブジェを作ろう
ore.god
681デフォルトの名無しさん
2017/07/20(木) 23:47:19.71ID:1m8bkM5u どこへ書いておけば後々楽かなぁ〜ってことだけ考えとけばよく
誰が処理するか、とかワケワカランことは考えなくてよし
これで大体迷子になっている人が多い印象、2chみてる限りはね
誰が処理するか、とかワケワカランことは考えなくてよし
これで大体迷子になっている人が多い印象、2chみてる限りはね
682デフォルトの名無しさん
2017/07/20(木) 23:47:26.83ID:Y8mmcpEl >>680
そのオブジェは邪魔なのでお片付けしちゃいましょーね〜
そのオブジェは邪魔なのでお片付けしちゃいましょーね〜
683デフォルトの名無しさん
2017/07/20(木) 23:48:59.86ID:mEIqzc+z684デフォルトの名無しさん
2017/07/20(木) 23:58:42.38ID:Y8mmcpEl すべてを知ってるのにファクトリ隠蔽をご存じないのはおもしろいですね
カプセル化としても大切なポイントなのに
カプセル化としても大切なポイントなのに
685デフォルトの名無しさん
2017/07/20(木) 23:59:13.34ID:1m8bkM5u 別にそういうわけでもないけど
でもよ、書かなきゃならないコードの総量は決まっているわけよ
必要な機能を削るわけにはいかないからな
とにかく、それは、決まってるから、初めから
それを分割してどこへ書くかってだけの話で
無理に小さなオブジェクトへ不必要にコードを押し込んでも意味無いっつーか
自然な形で実装できればそれでよし
自然が一番
でもよ、書かなきゃならないコードの総量は決まっているわけよ
必要な機能を削るわけにはいかないからな
とにかく、それは、決まってるから、初めから
それを分割してどこへ書くかってだけの話で
無理に小さなオブジェクトへ不必要にコードを押し込んでも意味無いっつーか
自然な形で実装できればそれでよし
自然が一番
686デフォルトの名無しさん
2017/07/21(金) 00:07:01.17ID:joLx1qFD あぁ、「小さなオブジェクト」ってのは変な表現だな
「末端のオブジェクト」でおねがい
「末端のオブジェクト」でおねがい
687デフォルトの名無しさん
2017/07/21(金) 00:26:40.80ID:61IBLwjA 自然な手続き型至上主義の老害ガイジいるかぎり
日本の未来は明るいな
日本の未来は明るいな
688デフォルトの名無しさん
2017/07/21(金) 00:27:36.02ID:61IBLwjA > でもよ、書かなきゃならないコードの総量は決まっているわけよ
> 必要な機能を削るわけにはいかないからな
> とにかく、それは、決まってるから、初めから
これ読んだだけで程度がしれるからすごい
> 必要な機能を削るわけにはいかないからな
> とにかく、それは、決まってるから、初めから
これ読んだだけで程度がしれるからすごい
689デフォルトの名無しさん
2017/07/21(金) 00:32:01.04ID:joLx1qFD あと、SSE用、AVX用、AVX2用、AVX512用、と
プログラムのメイン部を4つも用意するのはマジ勘弁なんで
その辺も含めてコンパイラのループのSIMD展開に頑張ってもらうしかないと思う
プログラムのメイン部を4つも用意するのはマジ勘弁なんで
その辺も含めてコンパイラのループのSIMD展開に頑張ってもらうしかないと思う
690デフォルトの名無しさん
2017/07/21(金) 00:41:30.63ID:joLx1qFD そういった煽りには何かこう、イラッとすら来ないんだよ
何言っても無駄なのは知ってるし
囚われてる的な何か
自分で気づくまではどうにもならない類
迷路を自分で作って自分で解くのには飽きた
ただそれだけ
何言っても無駄なのは知ってるし
囚われてる的な何か
自分で気づくまではどうにもならない類
迷路を自分で作って自分で解くのには飽きた
ただそれだけ
691デフォルトの名無しさん
2017/07/21(金) 06:50:23.04ID:61IBLwjA 糞設計糞コード糞重複
↓
でもよ、書かなきゃならないコードの総量は決まっているわけよ
必要な機能を削るわけにはいかないからな
とにかく、それは、決まってるから、初めから
ガイジか?
↓
でもよ、書かなきゃならないコードの総量は決まっているわけよ
必要な機能を削るわけにはいかないからな
とにかく、それは、決まってるから、初めから
ガイジか?
692デフォルトの名無しさん
2017/07/21(金) 08:41:20.87ID:aAG5dXP6 コード総量がどーのって方は固定値取得とかエラー処理、ログ出力のような汎用的な処理も毎回コピペしてるんだろうか
そして毎回同じテストをしているのだろうか
そして毎回同じテストをしているのだろうか
693デフォルトの名無しさん
2017/07/21(金) 09:45:18.16ID:KtdPIrW5694デフォルトの名無しさん
2017/07/21(金) 10:35:11.71ID:kcrlXzzc 俺も最後にするわ
>>676
> DDDのやり方ではない
ルールをどこに実装するかの話で、あ氏はデータがルールを持つのに納得できないというので、
DDDではServiceにルールを実装することもあり、DDDの話を持ち出したまで
>>676
> DDDのやり方ではない
ルールをどこに実装するかの話で、あ氏はデータがルールを持つのに納得できないというので、
DDDではServiceにルールを実装することもあり、DDDの話を持ち出したまで
695デフォルトの名無しさん
2017/07/21(金) 10:43:54.11ID:kcrlXzzc >>674
> そもそも正常系を例外で処理すんな。
ケースバイケースだしポリシーの話でもあるね
>>577でも「例えば例外をthrow」って書いてるだろ?
俺がそれに関して今君と話したいのはここね
>>670
> 基底クラスでキャッチとか常識的に考えて、まともなシステムではありえないだろ。
> テストの事。
> ....cancel()が、メソッドで、かつ、例外を吐くならば、
> 呼び出し元のtry-catchやってる、例えばCartやらUserやら、そのクラスも必ず再試験でしょ。
まぁ別に再試験してもいいが、しなくてもいい
なぜなら、
class Exception;
class ServiceException extends Exception;
class OrderServiceException extends ServiceException;
class OrderCancelNotAllowedException extends OrderServiceException;
という例外クラス群だったとき、CartやUserは、ServiceExceptionやOrderServiceExceptionなんかで
catchすべきだから
> CardやらUserを再試験するならば、システム全体の結合試験もやり直しだわな。
OrderCancelNotAllowedExceptionを作成する前後で、全体として何かがかわったわけではない
まぁ、やり直してもいいけど
> >>673
> アホか。
何がアホなのか全くわからない
君と会話する意義がゼロに近づいてるぞ
> そもそも正常系を例外で処理すんな。
ケースバイケースだしポリシーの話でもあるね
>>577でも「例えば例外をthrow」って書いてるだろ?
俺がそれに関して今君と話したいのはここね
>>670
> 基底クラスでキャッチとか常識的に考えて、まともなシステムではありえないだろ。
> テストの事。
> ....cancel()が、メソッドで、かつ、例外を吐くならば、
> 呼び出し元のtry-catchやってる、例えばCartやらUserやら、そのクラスも必ず再試験でしょ。
まぁ別に再試験してもいいが、しなくてもいい
なぜなら、
class Exception;
class ServiceException extends Exception;
class OrderServiceException extends ServiceException;
class OrderCancelNotAllowedException extends OrderServiceException;
という例外クラス群だったとき、CartやUserは、ServiceExceptionやOrderServiceExceptionなんかで
catchすべきだから
> CardやらUserを再試験するならば、システム全体の結合試験もやり直しだわな。
OrderCancelNotAllowedExceptionを作成する前後で、全体として何かがかわったわけではない
まぁ、やり直してもいいけど
> >>673
> アホか。
何がアホなのか全くわからない
君と会話する意義がゼロに近づいてるぞ
696デフォルトの名無しさん
2017/07/21(金) 13:01:16.21ID:+UMDimrc 話がかみ合っていない
おそらく基底クラスの認識がズレてる
おそらく基底クラスの認識がズレてる
697あ
2017/07/21(金) 13:09:10.34ID:4ZsLxlrH >>695
例外をスローってのは、もうどうしようもない場合だろ。
ServiceExceptionに新しい小クラス作ったなら、それは元のServiceExceptionではないんだから、テスト範囲膨大になんじゃん?って話。
前提として変わってるよ。....NotAllowed....で拾ってたなら、具体的にはNotAllowedのうちのあれとこれとそれを拾ってた訳なんだから。
大きくCatchして、その中で各サブクラスごとの処理してた時に、新しいサブクラスのハンドリングはすべきか否か、ってのが、仕様として考え直しだろって話。
APIとしてシンプルが売りって、それ呼ぶときだけで、ハンドリングは全然シンプルじゃないじゃん。
例外をスローってのは、もうどうしようもない場合だろ。
ServiceExceptionに新しい小クラス作ったなら、それは元のServiceExceptionではないんだから、テスト範囲膨大になんじゃん?って話。
前提として変わってるよ。....NotAllowed....で拾ってたなら、具体的にはNotAllowedのうちのあれとこれとそれを拾ってた訳なんだから。
大きくCatchして、その中で各サブクラスごとの処理してた時に、新しいサブクラスのハンドリングはすべきか否か、ってのが、仕様として考え直しだろって話。
APIとしてシンプルが売りって、それ呼ぶときだけで、ハンドリングは全然シンプルじゃないじゃん。
698あ
2017/07/21(金) 13:14:58.39ID:4ZsLxlrH 見た目上疎なのと、実際に疎なのは全然違うし、
大雑把にしか取らなくて良いのと、大雑把にしか取れないのは全然違う。
未来の定義を含んでるから大きく取る他無い、って設計として柔軟なんじゃなくて、設計としてあやふやなんじゃん。
ある意味、そいつが責務として無責任な返事をしてて、その後始末を使う側に押し付けてるように見える。
大雑把にしか取らなくて良いのと、大雑把にしか取れないのは全然違う。
未来の定義を含んでるから大きく取る他無い、って設計として柔軟なんじゃなくて、設計としてあやふやなんじゃん。
ある意味、そいつが責務として無責任な返事をしてて、その後始末を使う側に押し付けてるように見える。
699デフォルトの名無しさん
2017/07/21(金) 14:11:25.03ID:joLx1qFD そもそもの質問の題意からかなり外れてしまっているように思えるんだが
こういう風にかくも脱線するのがOOPなのかしらね
平たく言えば、もともとは
メソッドが正しくないタイミングで呼ばれたら、どう対処すべき?
って質問だったろう
で、明確な答えなんかないだろう
例えば、a=10; b+=a; って書くべきところを順番を間違えて b+=a; a=10; って書いたら
正しくないタイミングで処理したといえるわけだけど、コンパイルエラーも実行エラーも出ないし
それが我々の日常で、ただのバグであって、手続き型言語というのは何時でも順番が大事で
正しいタイミングで処理が走るように気を付けて書くものだったろう
一方で、順番を間違えたためにバグってヌルポやdiv0が発生することもある
ただしこれはどうしても続行が不可能だから例外を飛ばしているわけであって・・・
あとほか、初期化前の変数を参照しようとして怒られるとか、もあるが
基本的には手続き型言語は処理の順番の権化なので
処理する順番を間違えたとか、変なタイミングでメソッドを呼んだとか
それはプログラマのポカ、バグ、なんだから、テストで炙り出すしかないだろう
こんなことを全部が全部丁寧に例外なんかで対応していたら
手続き型言語はすべての個所で順番が重要なわけだから、全てでチェックが必要になる
順番やタイミングを誤って良い場所など、無いと思ったほうが良い
こういう風にかくも脱線するのがOOPなのかしらね
平たく言えば、もともとは
メソッドが正しくないタイミングで呼ばれたら、どう対処すべき?
って質問だったろう
で、明確な答えなんかないだろう
例えば、a=10; b+=a; って書くべきところを順番を間違えて b+=a; a=10; って書いたら
正しくないタイミングで処理したといえるわけだけど、コンパイルエラーも実行エラーも出ないし
それが我々の日常で、ただのバグであって、手続き型言語というのは何時でも順番が大事で
正しいタイミングで処理が走るように気を付けて書くものだったろう
一方で、順番を間違えたためにバグってヌルポやdiv0が発生することもある
ただしこれはどうしても続行が不可能だから例外を飛ばしているわけであって・・・
あとほか、初期化前の変数を参照しようとして怒られるとか、もあるが
基本的には手続き型言語は処理の順番の権化なので
処理する順番を間違えたとか、変なタイミングでメソッドを呼んだとか
それはプログラマのポカ、バグ、なんだから、テストで炙り出すしかないだろう
こんなことを全部が全部丁寧に例外なんかで対応していたら
手続き型言語はすべての個所で順番が重要なわけだから、全てでチェックが必要になる
順番やタイミングを誤って良い場所など、無いと思ったほうが良い
700デフォルトの名無しさん
2017/07/21(金) 14:17:09.63ID:joLx1qFD しかし、丁寧に作るなら
明らかにおかしなタイミングやおかしな順番で呼ばれたら例外を投げるのは有り
ただしそれはプログラマがミスをしたことを早期に伝えるためであって
そこで条件分岐などして通常フローに組み込んだらまたおかしなことになる
まぁほどほどに
っていう程度の話なのに、それが何故
何処でキャンセル出来るかどうか判断するか、とか
キャンセル処理は何処でするか、とか
認可がどうのこうの、ジョブがどうのこうの
とかって話に派生するのが謎だわ
ある意味では面白い問いかけでは有ったと思うよ
手続き型言語で「手続き」を間違えた場合、どう対処するか?っていう
そのままバグるのか、例外投げるのか、エラーコード返すのか、何もしないのか
好きなのを選べ
明らかにおかしなタイミングやおかしな順番で呼ばれたら例外を投げるのは有り
ただしそれはプログラマがミスをしたことを早期に伝えるためであって
そこで条件分岐などして通常フローに組み込んだらまたおかしなことになる
まぁほどほどに
っていう程度の話なのに、それが何故
何処でキャンセル出来るかどうか判断するか、とか
キャンセル処理は何処でするか、とか
認可がどうのこうの、ジョブがどうのこうの
とかって話に派生するのが謎だわ
ある意味では面白い問いかけでは有ったと思うよ
手続き型言語で「手続き」を間違えた場合、どう対処するか?っていう
そのままバグるのか、例外投げるのか、エラーコード返すのか、何もしないのか
好きなのを選べ
701デフォルトの名無しさん
2017/07/21(金) 14:35:53.73ID:joLx1qFD 俺が思うに
「呼び出し元のプログラムがバグってて誤ったタイミングや順番でメソッドが呼ばれた場合
どう対処すべきか」
っていう問題と
「仕様上、今現在キャンセルできる状態なのかどうなのか、また、どこで判定するのか」
という別問題を混同して一度に扱おうとするから
話がややこしくこんがらがっているのではないか
「呼び出し元のプログラムがバグってて誤ったタイミングや順番でメソッドが呼ばれた場合
どう対処すべきか」
っていう問題と
「仕様上、今現在キャンセルできる状態なのかどうなのか、また、どこで判定するのか」
という別問題を混同して一度に扱おうとするから
話がややこしくこんがらがっているのではないか
702デフォルトの名無しさん
2017/07/21(金) 15:22:03.43ID:kcrlXzzc >>697
> 例外をスローってのは、もうどうしようもない場合だろ。
トランザクションをコミットできないような事象は全て例外でハンドリングするというポリシーもありえる
> ServiceExceptionに新しい小クラス作ったなら、それは元のServiceExceptionではないんだから、テスト範囲膨大になんじゃん?って話。
だから基底クラスでcatchしろって話なんだが
> 例外をスローってのは、もうどうしようもない場合だろ。
トランザクションをコミットできないような事象は全て例外でハンドリングするというポリシーもありえる
> ServiceExceptionに新しい小クラス作ったなら、それは元のServiceExceptionではないんだから、テスト範囲膨大になんじゃん?って話。
だから基底クラスでcatchしろって話なんだが
703デフォルトの名無しさん
2017/07/21(金) 15:35:40.87ID:kcrlXzzc704デフォルトの名無しさん
2017/07/21(金) 15:38:37.36ID:kcrlXzzc >>697
> 前提として変わってるよ。....NotAllowed....で拾ってたなら、具体的にはNotAllowedのうちのあれとこれとそれを拾ってた訳なんだから。
> 大きくCatchして、その中で各サブクラスごとの処理してた時に、新しいサブクラスのハンドリングはすべきか否か、ってのが、仕様として考え直しだろって話。
全く意味がわからん
コードで説明して
> 前提として変わってるよ。....NotAllowed....で拾ってたなら、具体的にはNotAllowedのうちのあれとこれとそれを拾ってた訳なんだから。
> 大きくCatchして、その中で各サブクラスごとの処理してた時に、新しいサブクラスのハンドリングはすべきか否か、ってのが、仕様として考え直しだろって話。
全く意味がわからん
コードで説明して
705デフォルトの名無しさん
2017/07/21(金) 15:52:10.73ID:kcrlXzzc >>697
> 大きくCatchして、その中で各サブクラスごとの処理してた時に、
ちょっと待てよ、そんなこと誰もしないぞ
つか、君、SOLIDのことはわかってるんだろうな?
まさかとは思うが、ポリモフィズムすら知らないなんてことはないよな?
> 大きくCatchして、その中で各サブクラスごとの処理してた時に、
ちょっと待てよ、そんなこと誰もしないぞ
つか、君、SOLIDのことはわかってるんだろうな?
まさかとは思うが、ポリモフィズムすら知らないなんてことはないよな?
706デフォルトの名無しさん
2017/07/21(金) 16:01:34.64ID:JaMkQK0G ずいぶん前から何度も訊いてる>>422,434,455,527んだが、なぜ答えてくれなんだ出題者よ
707デフォルトの名無しさん
2017/07/21(金) 16:14:55.54ID:h+PJbf5A 手続きおじさんに触れるとめんどくさいよ
708デフォルトの名無しさん
2017/07/21(金) 16:41:22.90ID:joLx1qFD >>703
>>412を100回読めばわかるが
もともとは
「実行できない状況でメソッドが呼ばれたら、どう対処すべき?」
って話だろ
で、実行できない、処理を続行できないので、例外投げてますよ、というだけの
実際彼は
> ただその関数型方式でも結局、状態によって呼んではいけない処理を容易に呼べてしまう所は同じままだと思う
> ビジネスルールが複雑化して状態数が増えるとソースコードがinvalid argument exceptionだらけになってしまう
とも言っているわけで、呼ばれてはいけないタイミングで呼ばれたら、どう対処すべき?って話なんだよ
呼んではいけない状況で呼ぶな、バグるから呼ぶな、は手続き型の基本であるが
まぁ安全のために例外でも飛ばしておこうと
それを>>416が
> 値を持ったデータの塊に生やしたメソッドでやるから話がややこしくなるのでは?
と余計なことを言うから話がややこしくなって脱線したわけだが
実際には cancel() がどこに実装されていても関係ないわけよ
本質は、キャンセル出来ない状況で cancel() 呼ばれたらどうすんの?例外飛ばすの?
例外であふれかえるんだけど?
って質問なんだから、どこに実装されていても関係ない
そしてこんなことは手続き型プログラミングではありふれている一般的な話題であって
(手続き型なんだから手続きを守ってもらわないと困る)
ジョブとか認可とか、以降の話は、まるで脱線
>>412を100回読めばわかるが
もともとは
「実行できない状況でメソッドが呼ばれたら、どう対処すべき?」
って話だろ
で、実行できない、処理を続行できないので、例外投げてますよ、というだけの
実際彼は
> ただその関数型方式でも結局、状態によって呼んではいけない処理を容易に呼べてしまう所は同じままだと思う
> ビジネスルールが複雑化して状態数が増えるとソースコードがinvalid argument exceptionだらけになってしまう
とも言っているわけで、呼ばれてはいけないタイミングで呼ばれたら、どう対処すべき?って話なんだよ
呼んではいけない状況で呼ぶな、バグるから呼ぶな、は手続き型の基本であるが
まぁ安全のために例外でも飛ばしておこうと
それを>>416が
> 値を持ったデータの塊に生やしたメソッドでやるから話がややこしくなるのでは?
と余計なことを言うから話がややこしくなって脱線したわけだが
実際には cancel() がどこに実装されていても関係ないわけよ
本質は、キャンセル出来ない状況で cancel() 呼ばれたらどうすんの?例外飛ばすの?
例外であふれかえるんだけど?
って質問なんだから、どこに実装されていても関係ない
そしてこんなことは手続き型プログラミングではありふれている一般的な話題であって
(手続き型なんだから手続きを守ってもらわないと困る)
ジョブとか認可とか、以降の話は、まるで脱線
709デフォルトの名無しさん
2017/07/21(金) 16:45:33.11ID:joLx1qFD いうなれば
「初期化メソッドが呼び忘れられている状態でオブジェクトの他のメソッドが呼ばれたら
どう対処すべき?例外飛ばしとくべき?例外であふれかえるんだけど?」
っていう質問と同義なんだよ
「初期化メソッドが呼び忘れられている状態でオブジェクトの他のメソッドが呼ばれたら
どう対処すべき?例外飛ばしとくべき?例外であふれかえるんだけど?」
っていう質問と同義なんだよ
710デフォルトの名無しさん
2017/07/21(金) 16:54:46.20ID:kcrlXzzc >>708
> もともとは
> 「実行できない状況でメソッドが呼ばれたら、どう対処すべき?」
> って話だろ
そうだが、バグってそうなったらという話じゃないと思ったが
> って質問なんだから、どこに実装されていても関係ない
そんなことないって延々話が続いてたわけだが
> もともとは
> 「実行できない状況でメソッドが呼ばれたら、どう対処すべき?」
> って話だろ
そうだが、バグってそうなったらという話じゃないと思ったが
> って質問なんだから、どこに実装されていても関係ない
そんなことないって延々話が続いてたわけだが
711あ
2017/07/21(金) 16:57:09.68ID:4ZsLxlrH 脱線も何も一番大事だと思うけど。
まー、理解できないなら仕方ないわ。
DTOオブジェクトにメソッド持たせたりとか、過去やった事として悪手だと言ってるんだが、
多分使いたくて仕方ないんだろ。
まー、理解できないなら仕方ないわ。
DTOオブジェクトにメソッド持たせたりとか、過去やった事として悪手だと言ってるんだが、
多分使いたくて仕方ないんだろ。
712デフォルトの名無しさん
2017/07/21(金) 16:58:59.38ID:kcrlXzzc713デフォルトの名無しさん
2017/07/21(金) 17:02:18.04ID:joLx1qFD 大体からしてキャンセルできない状態であれば
画面上のキャンセルボタンは無効になっているか表示されてないか
ともかくキャンセルのオペレーションは実行できなくなってるはずなんだよ
もし無理やり飛んできても、どこかの段階で弾く
それなのに cancel() が呼ばれるってのは基本的にプログラムがバグってるんだよ
だからキャンセルできない状態なのにcancel()呼ぶな、バグるから呼ぶなって事になるが
それでもプログラマの不注意で呼んでしまうかもしれないので
安全のために例外でも飛ばしておきましょう
そうすれば早期に気づくでしょ、ってこと
だからassert()みたいなものだな
画面上のキャンセルボタンは無効になっているか表示されてないか
ともかくキャンセルのオペレーションは実行できなくなってるはずなんだよ
もし無理やり飛んできても、どこかの段階で弾く
それなのに cancel() が呼ばれるってのは基本的にプログラムがバグってるんだよ
だからキャンセルできない状態なのにcancel()呼ぶな、バグるから呼ぶなって事になるが
それでもプログラマの不注意で呼んでしまうかもしれないので
安全のために例外でも飛ばしておきましょう
そうすれば早期に気づくでしょ、ってこと
だからassert()みたいなものだな
714デフォルトの名無しさん
2017/07/21(金) 17:13:00.06ID:joLx1qFD >>710
>そうだが、バグってそうなったらという話じゃないと思ったが
バグらずにそうなるってどういう状況だよ
実際にcancel()呼んでみて例外が飛んできてから
「あぁ今キャンセルできない状態みたいだからゴメンって画面に表示しとくか」
ってプログラムあり得るか?
キャンセルできる状態かどうかは事前にチェックしてて
それに合った画面表示になってるだろ
それでもcancel()で例外が飛ぶことはあるだろうが
それは本当の実行時エラーだ
少なくともキャンセルできない状況というのが事前に判明しているにもかかわらず
実際にcancel()呼んでみて例外が飛んでくるかどうかで判断とかあり得ないだろ
だからキャンセルできない状態でcancel()が呼ばれるってのは単純にバグってるんだよ
その辺をケアするかどうかの話だろ
>そうだが、バグってそうなったらという話じゃないと思ったが
バグらずにそうなるってどういう状況だよ
実際にcancel()呼んでみて例外が飛んできてから
「あぁ今キャンセルできない状態みたいだからゴメンって画面に表示しとくか」
ってプログラムあり得るか?
キャンセルできる状態かどうかは事前にチェックしてて
それに合った画面表示になってるだろ
それでもcancel()で例外が飛ぶことはあるだろうが
それは本当の実行時エラーだ
少なくともキャンセルできない状況というのが事前に判明しているにもかかわらず
実際にcancel()呼んでみて例外が飛んでくるかどうかで判断とかあり得ないだろ
だからキャンセルできない状態でcancel()が呼ばれるってのは単純にバグってるんだよ
その辺をケアするかどうかの話だろ
715デフォルトの名無しさん
2017/07/21(金) 17:15:35.17ID:kcrlXzzc >>713
> 画面上のキャンセルボタンは無効になっているか表示されてないか
> ともかくキャンセルのオペレーションは実行できなくなってるはずなんだよ
そんなことないから、どこで/誰がキャンセル可能かどうかを判断すべきかって話になってるんだが
・ブラウザで注文一覧を見る
・見ている間に発送処理が完了する
・注文キャンセルを行う
・サーバが注文キャンセルリクエストを受け取る
みたいなときとか
厳密に言えば、
if (isCancelable()) {
doCancel();
}
がアトミックでなければ、「発送」が途中に滑り込む可能性もある
> 画面上のキャンセルボタンは無効になっているか表示されてないか
> ともかくキャンセルのオペレーションは実行できなくなってるはずなんだよ
そんなことないから、どこで/誰がキャンセル可能かどうかを判断すべきかって話になってるんだが
・ブラウザで注文一覧を見る
・見ている間に発送処理が完了する
・注文キャンセルを行う
・サーバが注文キャンセルリクエストを受け取る
みたいなときとか
厳密に言えば、
if (isCancelable()) {
doCancel();
}
がアトミックでなければ、「発送」が途中に滑り込む可能性もある
716デフォルトの名無しさん
2017/07/21(金) 17:46:44.99ID:FxlP3XPo 手続きの主張は「例外出させるプログラムを組む人が悪い」なので話は通じないよ
ここはできるだけヒューマンエラーを排除するための考え方を話す場所なのにね
ここはできるだけヒューマンエラーを排除するための考え方を話す場所なのにね
717デフォルトの名無しさん
2017/07/21(金) 20:12:55.82ID:joLx1qFD >>715
それは本当に防ぎようのないことだから例外投げるなりなんなりすればよいが
もともと質問者はそんな質問はしていないだろ?
そんなことをどうにかしてくれって言ってるわけじゃないだろ?
>>412のコードを見てもそうだし
>>417でも
> ただその関数型方式でも結局、状態によって呼んではいけない処理を容易に呼べてしまう所は同じままだと思う
> ビジネスルールが複雑化して状態数が増えるとソースコードがinvalid argument exceptionだらけになってしまう
って言ってるだろ
「呼んではいけない処理を容易に呼べてしまう」
って書いてあるだろ?
これは要するに、「呼んではいけない状態の時に呼んではいけないメソッドを呼べなくする方法はないものかね?」
って質問しているわけだよ
それが出来ればプログラマが呼び出しミスすることを原理上なくすことが出来て
ここが大事だが、「その類のエラー処理を書かないで済むので」
> ビジネスルールが複雑化して状態数が増えるとソースコードがinvalid argument exceptionだらけになってしまう
のを防げるんだけども?っていう質問をしているんだよ
呼んじゃならない状態ってわかりきってる時でも、呼んじゃならないメソッドが呼び出せちゃうから
それに対するエラー処理書かなきゃなんねーメンドクセーなんか良い方法ない?って質問なんだよ
だがそれは手続き型言語に対する挑戦でもあるから程々にって俺は思うが、そのことはまぁどうでもよい
それで>>453なんかは質問者の意図を理解してスレの流れを元に戻そうとしているし
>>706なんかも質問者の意図を理解しつつ、探っているだろ
とろこが若干約二名は全然質問の意図と関係ないことを延々と長時間ものすごいレス数で
いったい何やってんだ?
こんなのがプロジェクトに交じってたら会議がいつまでたっても終わらないし
これがもし顧客の質問だったのなら、もうあいつは連れてくるなってなるだろ
全然違うこと言いだして知識をひけらかしあって何がしたいんだ?
それは本当に防ぎようのないことだから例外投げるなりなんなりすればよいが
もともと質問者はそんな質問はしていないだろ?
そんなことをどうにかしてくれって言ってるわけじゃないだろ?
>>412のコードを見てもそうだし
>>417でも
> ただその関数型方式でも結局、状態によって呼んではいけない処理を容易に呼べてしまう所は同じままだと思う
> ビジネスルールが複雑化して状態数が増えるとソースコードがinvalid argument exceptionだらけになってしまう
って言ってるだろ
「呼んではいけない処理を容易に呼べてしまう」
って書いてあるだろ?
これは要するに、「呼んではいけない状態の時に呼んではいけないメソッドを呼べなくする方法はないものかね?」
って質問しているわけだよ
それが出来ればプログラマが呼び出しミスすることを原理上なくすことが出来て
ここが大事だが、「その類のエラー処理を書かないで済むので」
> ビジネスルールが複雑化して状態数が増えるとソースコードがinvalid argument exceptionだらけになってしまう
のを防げるんだけども?っていう質問をしているんだよ
呼んじゃならない状態ってわかりきってる時でも、呼んじゃならないメソッドが呼び出せちゃうから
それに対するエラー処理書かなきゃなんねーメンドクセーなんか良い方法ない?って質問なんだよ
だがそれは手続き型言語に対する挑戦でもあるから程々にって俺は思うが、そのことはまぁどうでもよい
それで>>453なんかは質問者の意図を理解してスレの流れを元に戻そうとしているし
>>706なんかも質問者の意図を理解しつつ、探っているだろ
とろこが若干約二名は全然質問の意図と関係ないことを延々と長時間ものすごいレス数で
いったい何やってんだ?
こんなのがプロジェクトに交じってたら会議がいつまでたっても終わらないし
これがもし顧客の質問だったのなら、もうあいつは連れてくるなってなるだろ
全然違うこと言いだして知識をひけらかしあって何がしたいんだ?
718デフォルトの名無しさん
2017/07/21(金) 20:15:16.81ID:AAWIl0Xa > 何がしたいんだ?
そんなもん自覚できてるわけねえだろw
もししててもさすがに発表できないだろw
そんなもん自覚できてるわけねえだろw
もししててもさすがに発表できないだろw
719デフォルトの名無しさん
2017/07/22(土) 09:54:45.41ID:ymw3r4IA 引っ込みどころを見失った手続きおじさん
720デフォルトの名無しさん
2017/07/22(土) 10:39:32.69ID:e/4f5Q/N721デフォルトの名無しさん
2017/07/22(土) 10:43:27.60ID:e/4f5Q/N >>717
> それに対するエラー処理書かなきゃなんねーメンドクセーなんか良い方法ない?って質問なんだよ
結論としては、オブジェクトのメソッド内部でチェックをして、例外で(エラーコードでいいけど)
返せってことでしょ。
手続き型だって、正常時が戻り値0、異常時がマイナスの値だったら、
if (hoge() < 0) {
some_error_process();
return;
}
some_process();
と書いて、hoge()のエラーの種類が増えても大丈夫なコードにするだろ?
それと同じだよ。
> それに対するエラー処理書かなきゃなんねーメンドクセーなんか良い方法ない?って質問なんだよ
結論としては、オブジェクトのメソッド内部でチェックをして、例外で(エラーコードでいいけど)
返せってことでしょ。
手続き型だって、正常時が戻り値0、異常時がマイナスの値だったら、
if (hoge() < 0) {
some_error_process();
return;
}
some_process();
と書いて、hoge()のエラーの種類が増えても大丈夫なコードにするだろ?
それと同じだよ。
723あ
2017/07/22(土) 10:56:40.54ID:qYk/zBjZ >>719
引っこむ必要もわからん。
とりあえず、手続き型ではないオブジェクト指向であれば、ロジックは例外ありきで作るべきなのかってのは気になる。
例外ではなく、メッセージパッシングに使ってるなら、それは例外の濫用では?と。
引っこむ必要もわからん。
とりあえず、手続き型ではないオブジェクト指向であれば、ロジックは例外ありきで作るべきなのかってのは気になる。
例外ではなく、メッセージパッシングに使ってるなら、それは例外の濫用では?と。
724あ
2017/07/22(土) 11:02:24.71ID:qYk/zBjZ >>721
やらんだろそれは。
if(hoge()==0){
some_process();
}else{
some_error_process();
}
return;
じゃねえの?
正常値があってのエラーなんだから。正常時は0なら、今も未来も正常値は0であるんだから、そっちを判断基準にすべきじゃん、って話。
やらんだろそれは。
if(hoge()==0){
some_process();
}else{
some_error_process();
}
return;
じゃねえの?
正常値があってのエラーなんだから。正常時は0なら、今も未来も正常値は0であるんだから、そっちを判断基準にすべきじゃん、って話。
725デフォルトの名無しさん
2017/07/22(土) 12:51:46.89ID:XLPzVjfx 0以外も正常値の場合はどうするの?
726デフォルトの名無しさん
2017/07/22(土) 13:07:19.55ID:F07Em1eB まだやるのかよ
もともとの>>412のコードよく見てみろよ
「assert」って書いてあるだろ
assertで投げた例外をトラップしてフローを切り替えるとか、あり得ないだろ
だから元々からして例外をトラップして処理を切り替えるって話じゃない
エラーコードが良いか、例外が良いか、も関係ないし
もしC言語だったならassertに引っかかったらabortして終わりの話
その後の後処理のことなんかまったく関係ないし、むしろ関係させてはいけない
assertに依存してその後の流れが変わるプログラムとかあり得ない、バグったことが分かればそれでよい
だから>>721も>>724も関係ない (しかも言ってることがどうでもよい)
assertで投げてるからにはこれはデバッグ用のコード
プログラマがクラスの使い方を誤ったときにassertで引っ掛けて知らせるのが趣旨
これを書くのが面倒だから、そもそも、呼ばれても困るときに、呼べないように出来ないか、と言っている
俺じゃなくて本人が>>417で言ってる
> ただその関数型方式でも結局、状態によって呼んではいけない処理を容易に呼べてしまう所は同じままだと思う
呼べてしまうから対応が必要になるので、呼べないように出来ないか、という話
呼ぶべきじゃない状態の時は、呼べなくしてしまってもかまわない、ということは、実行時エラーの話ではない
トライしてエラー捕まえる、そんな話ではない、元から呼べなくしてしまって構わないと、本人が言っている
Null 許容型とかそっち系の話
君らがしているのはNullチェックの仕方の話であって、質問者が言ってるのは
Nullを許可しないにはどうしたらよいか?のような話
話がおかしな方向に行ったのは>>416の
>値を持ったデータの塊に生やしたメソッドでやるから話がややこしくなるのでは?
からで、その考えに賛同しないわけじゃないし、むしろ好みであるが
だが今は関係が無い、ここでおかしくなった
そして無駄に300レスを消費したわけだが、話している内容はOOPでは何時もの事だが
「何をどこに書くか」であるが、このような宗教的話題は、ひとまず今は関係無かった、趣旨ではなかった
レイヤーが全然違った、もっとプリミティブな質問だったわけだ
もともとの>>412のコードよく見てみろよ
「assert」って書いてあるだろ
assertで投げた例外をトラップしてフローを切り替えるとか、あり得ないだろ
だから元々からして例外をトラップして処理を切り替えるって話じゃない
エラーコードが良いか、例外が良いか、も関係ないし
もしC言語だったならassertに引っかかったらabortして終わりの話
その後の後処理のことなんかまったく関係ないし、むしろ関係させてはいけない
assertに依存してその後の流れが変わるプログラムとかあり得ない、バグったことが分かればそれでよい
だから>>721も>>724も関係ない (しかも言ってることがどうでもよい)
assertで投げてるからにはこれはデバッグ用のコード
プログラマがクラスの使い方を誤ったときにassertで引っ掛けて知らせるのが趣旨
これを書くのが面倒だから、そもそも、呼ばれても困るときに、呼べないように出来ないか、と言っている
俺じゃなくて本人が>>417で言ってる
> ただその関数型方式でも結局、状態によって呼んではいけない処理を容易に呼べてしまう所は同じままだと思う
呼べてしまうから対応が必要になるので、呼べないように出来ないか、という話
呼ぶべきじゃない状態の時は、呼べなくしてしまってもかまわない、ということは、実行時エラーの話ではない
トライしてエラー捕まえる、そんな話ではない、元から呼べなくしてしまって構わないと、本人が言っている
Null 許容型とかそっち系の話
君らがしているのはNullチェックの仕方の話であって、質問者が言ってるのは
Nullを許可しないにはどうしたらよいか?のような話
話がおかしな方向に行ったのは>>416の
>値を持ったデータの塊に生やしたメソッドでやるから話がややこしくなるのでは?
からで、その考えに賛同しないわけじゃないし、むしろ好みであるが
だが今は関係が無い、ここでおかしくなった
そして無駄に300レスを消費したわけだが、話している内容はOOPでは何時もの事だが
「何をどこに書くか」であるが、このような宗教的話題は、ひとまず今は関係無かった、趣旨ではなかった
レイヤーが全然違った、もっとプリミティブな質問だったわけだ
727デフォルトの名無しさん
2017/07/22(土) 13:15:48.47ID:F07Em1eB >>721
↑がまずまだ間違っている
問題の趣旨を全く理解していない
元のプログラムはassertで投げている
これをキャッチして分岐する処理を制御フローに組み込んで出荷するのはあり得ない
if (hoge() < 0) {
some_error_process();
return;
}
some_process();
↑こんな話ではない
例外が飛んで来たら、ああ、バグ仕込んだな、コードを修正しなきゃ、って話であって
キャッチして対処する話ではない、エラーコードで分岐する話でもない
assertレベルの話だ
それに対して>>724がまた本当にどうでもよいことを言い出す
会話を長引かせることしか考えてないのか?
↑がまずまだ間違っている
問題の趣旨を全く理解していない
元のプログラムはassertで投げている
これをキャッチして分岐する処理を制御フローに組み込んで出荷するのはあり得ない
if (hoge() < 0) {
some_error_process();
return;
}
some_process();
↑こんな話ではない
例外が飛んで来たら、ああ、バグ仕込んだな、コードを修正しなきゃ、って話であって
キャッチして対処する話ではない、エラーコードで分岐する話でもない
assertレベルの話だ
それに対して>>724がまた本当にどうでもよいことを言い出す
会話を長引かせることしか考えてないのか?
728あ
2017/07/22(土) 13:50:17.99ID:qYk/zBjZ >>725
要件に無い。無いことをむしろ書くな。
>>726
ああ、これは読み損ねてた。すまん。
assert出したら死ぬってことだな。そりゃそっちが正しい。
いや、呼べてしまうから、呼べないようにしたい、に対してをずっと言ってるんよ。
呼ぶんじゃなくて、呼びたいとキューなりなんなりしろ、と。
そしたら、呼びたいというのは自由になる。
そのタスクは、「呼ぶ人」一人がさばいて、呼べませんでしたよと端的に残す、と。それは呼ぶことのエラーじゃなくて、呼ぶ人の、呼びたいキューに対する結果だよ、と。
だから、データに生やしたメソッドでやるのは、そのデータ一人が対応できる処理に限ろうね、って話に行き着くから、データ自体でロジック書かないでおこうね、って話だよ。
要件に無い。無いことをむしろ書くな。
>>726
ああ、これは読み損ねてた。すまん。
assert出したら死ぬってことだな。そりゃそっちが正しい。
いや、呼べてしまうから、呼べないようにしたい、に対してをずっと言ってるんよ。
呼ぶんじゃなくて、呼びたいとキューなりなんなりしろ、と。
そしたら、呼びたいというのは自由になる。
そのタスクは、「呼ぶ人」一人がさばいて、呼べませんでしたよと端的に残す、と。それは呼ぶことのエラーじゃなくて、呼ぶ人の、呼びたいキューに対する結果だよ、と。
だから、データに生やしたメソッドでやるのは、そのデータ一人が対応できる処理に限ろうね、って話に行き着くから、データ自体でロジック書かないでおこうね、って話だよ。
729デフォルトの名無しさん
2017/07/22(土) 13:50:41.22ID:XLPzVjfx > 例外が飛んで来たら、ああ、バグ仕込んだな、コードを修正しなきゃ、って話であって
お前が使ってるライブラリは例外飛ばしてくるだろ?
それはバグなのか?
お前が使うライブラリは例外を飛ばすのに
なんでお前が作るライブラリは例外を飛ばさないんだ?
例外の使い方間違ってるだろ
お前が使ってるライブラリは例外飛ばしてくるだろ?
それはバグなのか?
お前が使うライブラリは例外を飛ばすのに
なんでお前が作るライブラリは例外を飛ばさないんだ?
例外の使い方間違ってるだろ
730あ
2017/07/22(土) 13:52:41.06ID:qYk/zBjZ オブジェクトができる事なんか知れてんだから。
無理と言うかどっかで歪んでくる。
最初からそんなデータと処理を分割できなくなるような書き方するな。と。
結論「無謀」なの。
OrderRunnerとか、OrderQueueを作ることに何が問題なのかわからん。
無理と言うかどっかで歪んでくる。
最初からそんなデータと処理を分割できなくなるような書き方するな。と。
結論「無謀」なの。
OrderRunnerとか、OrderQueueを作ることに何が問題なのかわからん。
731あ
2017/07/22(土) 13:56:18.40ID:qYk/zBjZ >>729
横からだが、ライブラリが例外を飛ばすなら、ロジックではそれはトラップしてるべきかと。
どーしよーもないやつはトラップすべきでないので、最初からトラップしない。リスローもしない。では?
DiskFullやらOOMやらハンドルしても無駄でしょ。今現時点のスナップショットが正しく落とせるかすら不安な状態で無理に生き残っても意味ない。
ランタイムまで飛ばしてランタイムごと落ちるべきだと思う。
まさか21世紀になってABENDを見るとは思わなかったが、割と業種によってはあると思う。
横からだが、ライブラリが例外を飛ばすなら、ロジックではそれはトラップしてるべきかと。
どーしよーもないやつはトラップすべきでないので、最初からトラップしない。リスローもしない。では?
DiskFullやらOOMやらハンドルしても無駄でしょ。今現時点のスナップショットが正しく落とせるかすら不安な状態で無理に生き残っても意味ない。
ランタイムまで飛ばしてランタイムごと落ちるべきだと思う。
まさか21世紀になってABENDを見るとは思わなかったが、割と業種によってはあると思う。
732あ
2017/07/22(土) 13:58:25.52ID:qYk/zBjZ そう言う意味では当たり前みたいな、このライブラリではかならず○○Exceptionのサブクラスをスローします、みたいなライブラリはゴミだと思う。
733デフォルトの名無しさん
2017/07/22(土) 13:59:14.76ID:XLPzVjfx734デフォルトの名無しさん
2017/07/22(土) 14:00:24.18ID:XLPzVjfx735デフォルトの名無しさん
2017/07/22(土) 14:00:51.00ID:XLPzVjfx OOMは例外じゃないから的はずれなw
736あ
2017/07/22(土) 14:01:38.79ID:qYk/zBjZ >>733
だから、そんなのオープンするときにハンドリングしろよ。
オープンできなけりゃ死ぬなら、死ねばいいんだし、
リトライやらなんやらするならそいつがやれ。
gotoやらlngjmpの代わりに使うな。
だから、そんなのオープンするときにハンドリングしろよ。
オープンできなけりゃ死ぬなら、死ねばいいんだし、
リトライやらなんやらするならそいつがやれ。
gotoやらlngjmpの代わりに使うな。
737デフォルトの名無しさん
2017/07/22(土) 14:05:18.68ID:XLPzVjfx >>736
なにをそんなに熱くなってるのか知らんが、
殆どの例外はやろうと思えば復旧可能
例えバグによって発生したものであっても
そのバグの間接的な原因(変な値を入れない)をユーザーが
取り除いて再実行できる。
なにをそんなに熱くなってるのか知らんが、
殆どの例外はやろうと思えば復旧可能
例えバグによって発生したものであっても
そのバグの間接的な原因(変な値を入れない)をユーザーが
取り除いて再実行できる。
738あ
2017/07/22(土) 14:05:47.85ID:qYk/zBjZ >>734
あー、ごめん、それは例が広すぎたな。
ユーザがすぐにリアクションできる操作でそうなりゃ、問い合わせれば良いけど、ファイルを消して再実行が間に合わんままシステム動き続けて、メモリにも乗らなくなる可能性があるなら、最初からCatchすんなと。
そう言う意味では上の方でDiskFullExceptionを握ってるやつが居たら死ねと思う。
ってか、容量ぐらい先に確保できるか確認して、確保できなければエラー、確保できれば確保してから書いてケツを整えたら良いんでないの?
あー、ごめん、それは例が広すぎたな。
ユーザがすぐにリアクションできる操作でそうなりゃ、問い合わせれば良いけど、ファイルを消して再実行が間に合わんままシステム動き続けて、メモリにも乗らなくなる可能性があるなら、最初からCatchすんなと。
そう言う意味では上の方でDiskFullExceptionを握ってるやつが居たら死ねと思う。
ってか、容量ぐらい先に確保できるか確認して、確保できなければエラー、確保できれば確保してから書いてケツを整えたら良いんでないの?
739あ
2017/07/22(土) 14:07:42.06ID:qYk/zBjZ740デフォルトの名無しさん
2017/07/22(土) 14:08:45.73ID:XLPzVjfx >>738
(自分の都合がいい場合)は例外じゃなくていいって言ってる?
都合がわるい場合は例外とかダブルスタンダートはよせよw
> ってか、容量ぐらい先に確保できるか確認して、
はい。ダメなパターンw
(自分の都合がいい場合)は例外じゃなくていいって言ってる?
都合がわるい場合は例外とかダブルスタンダートはよせよw
> ってか、容量ぐらい先に確保できるか確認して、
はい。ダメなパターンw
741デフォルトの名無しさん
2017/07/22(土) 14:09:28.26ID:XLPzVjfx743あ
2017/07/22(土) 14:16:20.98ID:qYk/zBjZ744デフォルトの名無しさん
2017/07/22(土) 14:38:18.51ID:XLPzVjfx745デフォルトの名無しさん
2017/07/22(土) 14:39:51.97ID:yC6nSTt1 正常==0て
ペチパーの人達が死にそうだねw
ペチパーの人達が死にそうだねw
746デフォルトの名無しさん
2017/07/22(土) 14:44:08.73ID:yC6nSTt1 ウイードーズでさ
デスクが満杯エクスペクションになったら
エラーメッセじゃなくて
ショットダウンしていいのか?
デスクが満杯エクスペクションになったら
エラーメッセじゃなくて
ショットダウンしていいのか?
747デフォルトの名無しさん
2017/07/22(土) 15:59:46.31ID:XLPzVjfx748デフォルトの名無しさん
2017/07/22(土) 16:46:23.23ID:XPs8hc2M こんな無駄な討論ばっかしててよく会社クビにならないな。
設計の粒度とか一貫性なくて、大規模で開発したら崩壊しそう。
設計の粒度とか一貫性なくて、大規模で開発したら崩壊しそう。
749デフォルトの名無しさん
2017/07/22(土) 16:47:14.50ID:e/4f5Q/N >>728
> いや、呼べてしまうから、呼べないようにしたい、に対してをずっと言ってるんよ。
> 呼ぶんじゃなくて、呼びたいとキューなりなんなりしろ、と。
お前こんだけ話が続いてて一切進歩ないな。
呼べないようにするって話と、要求をQueueで管理するってのに全く関連性はないぞ。
> だから、データに生やしたメソッドでやるのは、そのデータ一人が対応できる処理に限ろうね、って話に行き着くから、データ自体でロジック書かないでおこうね、って話だよ。
だから、その範囲のビジネスルールはそのデータがもつmodelなんかに実装しましょうねってことだ。
> いや、呼べてしまうから、呼べないようにしたい、に対してをずっと言ってるんよ。
> 呼ぶんじゃなくて、呼びたいとキューなりなんなりしろ、と。
お前こんだけ話が続いてて一切進歩ないな。
呼べないようにするって話と、要求をQueueで管理するってのに全く関連性はないぞ。
> だから、データに生やしたメソッドでやるのは、そのデータ一人が対応できる処理に限ろうね、って話に行き着くから、データ自体でロジック書かないでおこうね、って話だよ。
だから、その範囲のビジネスルールはそのデータがもつmodelなんかに実装しましょうねってことだ。
750デフォルトの名無しさん
2017/07/22(土) 16:49:30.28ID:e/4f5Q/N あと、故意にか無意識にか理解できなくてかわからんが、「あることが実行できるかどうか」は
実行するそのタイミングまでわからない場合が多々あるってことを無視すんじゃねぇ。
だから、「実行できるときだけQueueに入れる」なんてことはできない。
実行するそのタイミングまでわからない場合が多々あるってことを無視すんじゃねぇ。
だから、「実行できるときだけQueueに入れる」なんてことはできない。
751デフォルトの名無しさん
2017/07/22(土) 16:54:42.27ID:e/4f5Q/N 例外に関していびつな考え方をするのは、Javaしか知らんプログラマなのかね。
752あ
2017/07/22(土) 17:03:51.73ID:qYk/zBjZ753デフォルトの名無しさん
2017/07/22(土) 17:04:24.01ID:e/4f5Q/N ごめん、Javaでも普通にアプリケーション/サービス/ビジネスロジック層でも例外使うの普通みたいだったわ。
http://education.yachinco.net/tips/java/08/3.html
http://education.yachinco.net/tips/java/08/3.html
754デフォルトの名無しさん
2017/07/22(土) 17:05:52.30ID:e/4f5Q/N755デフォルトの名無しさん
2017/07/22(土) 17:23:46.28ID:e/4f5Q/N ところで、>>412ってJavaなの?俺Javaよくしらないんだけど。
俺の感覚だとassertでエラーチェックするのはゴミコードなんだが、Javaだと普通なのか?
俺の感覚だとassertでエラーチェックするのはゴミコードなんだが、Javaだと普通なのか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【J SPORTS】FIFA U-17ワールドカップ ★9
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【ATP】テニス総合実況スレ2025 Part 211【WTA】
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 【高市早苗】バス会社、中国からのキャンセルで12月で2000万円~3000万円の損失へ [115996789]
- かしこいワンコっていうVtuberの子知ってる?
- カレーライスぐちゃぐちゃに混ぜる奴🤣
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
