前スレ
オブジェクト指向システムの設計 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+O772デフォルトの名無しさん
2017/07/23(日) 11:10:31.68ID:Q2e2rMDm773デフォルトの名無しさん
2017/07/23(日) 11:15:15.03ID:Q2e2rMDm >>768
> そもそも手続き型言語は状態や順番やタイミングによって、呼んで良かったり、ダメだったり
> 正しく動いたり、動かなかったり、正常だったりバグったり、するものだから
どういうプログラミングパラダイムだろうと、時間経過によって状態が変更しうるものの前には無力。
「事前にチェックして」「処理を実行する」が失敗するケースが発生しうる。
同時実効性や時間経過による変化、トランザクション分離レベルなどを考えないと、ベストな選択はできないだろう。
> そもそも手続き型言語は状態や順番やタイミングによって、呼んで良かったり、ダメだったり
> 正しく動いたり、動かなかったり、正常だったりバグったり、するものだから
どういうプログラミングパラダイムだろうと、時間経過によって状態が変更しうるものの前には無力。
「事前にチェックして」「処理を実行する」が失敗するケースが発生しうる。
同時実効性や時間経過による変化、トランザクション分離レベルなどを考えないと、ベストな選択はできないだろう。
774デフォルトの名無しさん
2017/07/23(日) 11:28:38.08ID:Q2e2rMDm >>763
> 呼び出せない状態の時は、初めからメソッドを呼び出せないように出来ないか、って話
> 初めから呼び出せない(例えばスコープ上見えなくなっている、など)のであれば
> 間違って呼び出されることもないし、そのことに関するエラー処理も要らなくなるから
以上の理由で、上記のような実装を行えるのは、ごく限られたケースであることがわかったと思う。
今回はOrderを例にして話が始まったが、Orderは上記実装とは相容れないもの。
> 呼び出せない状態の時は、初めからメソッドを呼び出せないように出来ないか、って話
> 初めから呼び出せない(例えばスコープ上見えなくなっている、など)のであれば
> 間違って呼び出されることもないし、そのことに関するエラー処理も要らなくなるから
以上の理由で、上記のような実装を行えるのは、ごく限られたケースであることがわかったと思う。
今回はOrderを例にして話が始まったが、Orderは上記実装とは相容れないもの。
775デフォルトの名無しさん
2017/07/23(日) 11:32:00.27ID:YFCxcaSM もしかして君らおじさんたち
契約プログラムを知らない無知蒙昧なるゴミ屑なのかな?
契約プログラムを知らない無知蒙昧なるゴミ屑なのかな?
776デフォルトの名無しさん
2017/07/23(日) 11:37:23.87ID:RME2ELD1 2、3人しか会話してないしそうだろ
777デフォルトの名無しさん
2017/07/23(日) 11:41:56.66ID:Q2e2rMDm 契約プログラミングでも、「キャンセルしてはいけない注文をキャンセルしようとする」というタイミングは発生しうる。
778デフォルトの名無しさん
2017/07/23(日) 12:02:34.67ID:YFCxcaSM >>768
CanceledOrder
DecidedOrder
は例が悪かったかも知れない
こうならどうだ
/** 予約系(チケットとか実体のない)注文 */
TicketOrder
/** 配送系(モノであり実体がある)注文 */
DeliveryHealthOrder
両者で、持ってるデータが大きく異なる場合は、
型で分けないとその「組み合わせ爆発」で状態の判定ifがそれこそ爆発する
「組み合わせ爆発」が嫌で汎用性が高いクラスを作りたいというなら
全てHashMap<Object, Object>で作ればいい
になるぞ
程度問題だ
CanceledOrder
DecidedOrder
は例が悪かったかも知れない
こうならどうだ
/** 予約系(チケットとか実体のない)注文 */
TicketOrder
/** 配送系(モノであり実体がある)注文 */
DeliveryHealthOrder
両者で、持ってるデータが大きく異なる場合は、
型で分けないとその「組み合わせ爆発」で状態の判定ifがそれこそ爆発する
「組み合わせ爆発」が嫌で汎用性が高いクラスを作りたいというなら
全てHashMap<Object, Object>で作ればいい
になるぞ
程度問題だ
779あ
2017/07/23(日) 12:28:22.68ID:QcEiibn9 >>773
「経過時間」の本質は「自分以外が触るデータ」であるか否かかと。
なので、データの分類は
自分だけが作れて、他人も見れるデータ(このデータは誰も編集禁止)
自分だけが作れて、自分だけが編集出来て、自分だけが削除できる、他人からは見る事が出来ないデータ
誰にでも作れるが、自分だけが見れて自分だけが削除できるデータ
の3つに切ると、やりやすい。
メールボックスみたいな仕組みがある言語なら要らん定義だけど。
Erlangは凄いわ。
「経過時間」の本質は「自分以外が触るデータ」であるか否かかと。
なので、データの分類は
自分だけが作れて、他人も見れるデータ(このデータは誰も編集禁止)
自分だけが作れて、自分だけが編集出来て、自分だけが削除できる、他人からは見る事が出来ないデータ
誰にでも作れるが、自分だけが見れて自分だけが削除できるデータ
の3つに切ると、やりやすい。
メールボックスみたいな仕組みがある言語なら要らん定義だけど。
Erlangは凄いわ。
780デフォルトの名無しさん
2017/07/23(日) 13:14:07.92ID:YFCxcaSM781あ
2017/07/23(日) 14:17:16.20ID:QcEiibn9 >>780
プロセスかアトム ! メッセージ
の形でメッセージ送るだけ。
もらった方は
recieve
{pattern,match} ->
処理
って感じで処理する。
返事が要るなら、
recieve
{From,pattern,match} ->
処理
From ! 返事
みたいに返せる。
プロセス内の変数はもともと持ち出し不可。
自分が作れて云々は自分からのメッセージで、
誰にでも作れて云々は自分へのメッセージ。
プロセスかアトム ! メッセージ
の形でメッセージ送るだけ。
もらった方は
recieve
{pattern,match} ->
処理
って感じで処理する。
返事が要るなら、
recieve
{From,pattern,match} ->
処理
From ! 返事
みたいに返せる。
プロセス内の変数はもともと持ち出し不可。
自分が作れて云々は自分からのメッセージで、
誰にでも作れて云々は自分へのメッセージ。
782デフォルトの名無しさん
2017/07/23(日) 21:38:14.62ID:8mi2T9pp783デフォルトの名無しさん
2017/07/23(日) 21:51:23.25ID:8mi2T9pp 例えばボタンクラスを定義するとして
EnableButtonClassとDisableButtonClassを用意しよう
で、ボタンが死ぬまで上記のどちらかで固定されるなら別に構わないが
実際にはボタンはEnableだったりDisableだったり動的に切り替わる
こうなってくるとディメリットがメリットを上回る
EnableButtonClassとDisableButtonClassを用意しよう
で、ボタンが死ぬまで上記のどちらかで固定されるなら別に構わないが
実際にはボタンはEnableだったりDisableだったり動的に切り替わる
こうなってくるとディメリットがメリットを上回る
784デフォルトの名無しさん
2017/07/23(日) 21:54:27.39ID:8mi2T9pp まぁ例がちょっとアレかもしれんがね
そのようなこと
そのようなこと
785デフォルトの名無しさん
2017/07/23(日) 22:01:50.55ID:YFCxcaSM 例えが下手杉内
ボタンクラスをどこかの処理に渡したいことなんてあるか?
オーダーとは全然別物だろ
抽象化が下手なやつはゴミみたいなPG書くって相場が決まっているもんだが
こりゃお里が知れるね
ボタンクラスをどこかの処理に渡したいことなんてあるか?
オーダーとは全然別物だろ
抽象化が下手なやつはゴミみたいなPG書くって相場が決まっているもんだが
こりゃお里が知れるね
786デフォルトの名無しさん
2017/07/23(日) 23:07:58.39ID:8mi2T9pp ん?ボタンクラス作るって言ってるんだから
GUIフレームワークも自分で作る前提だろ
ただ、そんなこと自分ですることあまりないから例がアレとは思うが
それでもボタンを例を挙げたのは、既存GUIプレームワークのボタンクラスは
そうはなってないでしょ?って例になるからだけど
じゃなきゃ、また「俺はこうする、俺はこうする」って話になって
無駄に300レス消費するのは嫌だなぁと
GUIフレームワークも自分で作る前提だろ
ただ、そんなこと自分ですることあまりないから例がアレとは思うが
それでもボタンを例を挙げたのは、既存GUIプレームワークのボタンクラスは
そうはなってないでしょ?って例になるからだけど
じゃなきゃ、また「俺はこうする、俺はこうする」って話になって
無駄に300レス消費するのは嫌だなぁと
787デフォルトの名無しさん
2017/07/23(日) 23:58:40.42ID:YFCxcaSM ?
788デフォルトの名無しさん
2017/07/24(月) 01:52:16.41ID:etlzFZfn よほどのことが無い限り悪手だから心配するな
>>429
>>429
789あ
2017/07/24(月) 08:40:24.40ID:MnNhZY7v フォーム上の物に例えるならリッチテキストの中身のRTFDocumentとかかな?
リッチテキストとして成立しないものはリッチテキスト側で制御すべきだけど、
選択文字に打ち消し線を打つってのはリッチテキストのメソッドで、いつでも呼べる。
ただ、業務ロジックとして、この行には打ち消し線を打たせない、ってのをやりたいなら、フォームかラッパーにもたせるべきだけど、
そのラッパーを状態ごとに「無効:DisabledRText」とか「上長承認済の為スタンプのみ押せる:StampableRText」とか作るってんなら明らかに悪手。
最初から、コピー新規しかできなけりゃ何も問題は無いんだけど、編集って概念が出てくるととたんにSQLで言うSERIALIZABLEみたいなトランザクションにせざるを得なくなる。UIオブジェクトに。c#ならsynclockかなんかでできるんだっけ?
リッチテキストとして成立しないものはリッチテキスト側で制御すべきだけど、
選択文字に打ち消し線を打つってのはリッチテキストのメソッドで、いつでも呼べる。
ただ、業務ロジックとして、この行には打ち消し線を打たせない、ってのをやりたいなら、フォームかラッパーにもたせるべきだけど、
そのラッパーを状態ごとに「無効:DisabledRText」とか「上長承認済の為スタンプのみ押せる:StampableRText」とか作るってんなら明らかに悪手。
最初から、コピー新規しかできなけりゃ何も問題は無いんだけど、編集って概念が出てくるととたんにSQLで言うSERIALIZABLEみたいなトランザクションにせざるを得なくなる。UIオブジェクトに。c#ならsynclockかなんかでできるんだっけ?
790デフォルトの名無しさん
2017/07/24(月) 13:14:09.75ID:mRBn7cmM >>779
> なので、データの分類は
> 自分だけが作れて、他人も見れるデータ(このデータは誰も編集禁止)
> 自分だけが作れて、自分だけが編集出来て、自分だけが削除できる、他人からは見る事が出来ないデータ
> 誰にでも作れるが、自分だけが見れて自分だけが削除できるデータ
> の3つに切ると、やりやすい。
ほんと筋が悪いわ
それこそが、上の方の認可とか権限とかの話だろ
> なので、データの分類は
> 自分だけが作れて、他人も見れるデータ(このデータは誰も編集禁止)
> 自分だけが作れて、自分だけが編集出来て、自分だけが削除できる、他人からは見る事が出来ないデータ
> 誰にでも作れるが、自分だけが見れて自分だけが削除できるデータ
> の3つに切ると、やりやすい。
ほんと筋が悪いわ
それこそが、上の方の認可とか権限とかの話だろ
791あ
2017/07/25(火) 01:45:37.04ID:CxglBIYc >>790
全然違う。カプセル化そのもの。
メモリ共有をせずにメッセージの受け渡しで処理を勧めていく。
あのさぁ。認可と同じとか、くだらんことほざく前に
Erlangでのメッセージの渡し方は見てきた?
技術力もなければ知識もなく、そして論理的思考力も無く、ソースの探究心すら無いならプログラマ辞めたらいいのに。
全然違う。カプセル化そのもの。
メモリ共有をせずにメッセージの受け渡しで処理を勧めていく。
あのさぁ。認可と同じとか、くだらんことほざく前に
Erlangでのメッセージの渡し方は見てきた?
技術力もなければ知識もなく、そして論理的思考力も無く、ソースの探究心すら無いならプログラマ辞めたらいいのに。
792デフォルトの名無しさん
2017/07/25(火) 07:01:29.77ID:JIVLmtjp …と、このハズいコードをドヤ顔で出してくる厚顔無恥が言っています
http://ideone.com/yvttId
http://ideone.com/yvttId
794デフォルトの名無しさん
2017/07/25(火) 10:09:39.54ID:AYapnpf4795あ
2017/07/25(火) 13:06:11.86ID:Yx6+jkpX >>794
うん、まぁ、これでちゃんと仕事して金もらえてるんだから、必要充分でしょ。
あんまり身の回りで通じなかったこと無いよ。文章。
よく読めば最初に言ってたりするのに、急いで斜め読みしてるように見えるが。
うん、まぁ、これでちゃんと仕事して金もらえてるんだから、必要充分でしょ。
あんまり身の回りで通じなかったこと無いよ。文章。
よく読めば最初に言ってたりするのに、急いで斜め読みしてるように見えるが。
796デフォルトの名無しさん
2017/07/25(火) 13:28:14.85ID:AYapnpf4 話が伝わらないのは、自分の文章力のせいだとつゆほども思わないのかね
797デフォルトの名無しさん
2017/07/26(水) 09:50:10.66ID:9TSdzGSU やーいゴミ
798デフォルトの名無しさん
2017/07/26(水) 22:31:24.22ID:qiVkp3Fv うるせーウンコ
799デフォルトの名無しさん
2017/07/27(木) 01:44:55.23ID:Ddw23w1u すげーなこのスレ。文章レベルが小学生だな。
プログラムレベルは、ただのコーダーよりはマシだけど、リーダーにするには経験も頭も足りない微妙な人ばっか。
仕事の憂さを晴らすために、議論ごっこしてるだけw
プログラムレベルは、ただのコーダーよりはマシだけど、リーダーにするには経験も頭も足りない微妙な人ばっか。
仕事の憂さを晴らすために、議論ごっこしてるだけw
800デフォルトの名無しさん
2017/07/27(木) 06:50:02.93ID:2FlrvgGr と思う小学生だったとさ。
801デフォルトの名無しさん
2017/07/28(金) 07:32:41.72ID:x8Tx8lXm オブシコきっしょ
802あ
2017/07/28(金) 07:42:36.79ID:ZQo/4U8U 小学生以上の文章レベルの議論はまだかね。
803デフォルトの名無しさん
2017/07/28(金) 09:35:35.04ID:Gpi+7j1z 注文のキャンセルの話は終わった?
終わってないね。
で結局キャンセルできるかどうかを判定する
メソッドはどこに作ることになったの?
まずキャンセルできるかどうかっていうのは
状態によってだけじゃなくて、権限によっても決まってくる。
でも状態の権限の2箇所で判定するのは面倒。
例えば、キャンセルボタンがenabledなのかdisabledなのかっていうのは
キャンセルできるかどうかで変わるわけだけど、
ビューに if (キャンセルできる? && 権限がある?) などと書いてしまったら
こういうのがあちこちに散らばってしまう。ために権限の事忘れたりね。
だから if (キャンセルできる?) と条件一つにしないといけない。
このキャンセルできる?の中には権限のチェックなどすべてのチェックが入っている
終わってないね。
で結局キャンセルできるかどうかを判定する
メソッドはどこに作ることになったの?
まずキャンセルできるかどうかっていうのは
状態によってだけじゃなくて、権限によっても決まってくる。
でも状態の権限の2箇所で判定するのは面倒。
例えば、キャンセルボタンがenabledなのかdisabledなのかっていうのは
キャンセルできるかどうかで変わるわけだけど、
ビューに if (キャンセルできる? && 権限がある?) などと書いてしまったら
こういうのがあちこちに散らばってしまう。ために権限の事忘れたりね。
だから if (キャンセルできる?) と条件一つにしないといけない。
このキャンセルできる?の中には権限のチェックなどすべてのチェックが入っている
804デフォルトの名無しさん
2017/07/28(金) 10:54:05.35ID:jw3NWySX >>803
キャンセルの「可能/不可能」と「許可/不許可」をいっしょにしてはいけない。
キャンセルの「可能/不可能」と「許可/不許可」をいっしょにしてはいけない。
805あ
2017/07/28(金) 14:51:46.75ID:ZQo/4U8U 終わりで良いと思ってたが。
不許可だから不可能なのか、不可能だから不許可なのかは組み合わせだすとキリがないよ。
可能不可能と許可不許可だけで4つ、それに、結果的に不可能だった、とか過去形や未来形、次承認あれば許可みたいな新しい状態に対応するときに、累乗に比例していってしまう。
しかも結果はできる、できないの二択。
なら、最初からそのオペレーション自体を切り分けて、例えばキャンセルなら権限ごとのできるできないを、
前工程で作ってしまって、単純にそれを取得するだけにした方が責任範囲がはっきりする。
不許可だから不可能なのか、不可能だから不許可なのかは組み合わせだすとキリがないよ。
可能不可能と許可不許可だけで4つ、それに、結果的に不可能だった、とか過去形や未来形、次承認あれば許可みたいな新しい状態に対応するときに、累乗に比例していってしまう。
しかも結果はできる、できないの二択。
なら、最初からそのオペレーション自体を切り分けて、例えばキャンセルなら権限ごとのできるできないを、
前工程で作ってしまって、単純にそれを取得するだけにした方が責任範囲がはっきりする。
806デフォルトの名無しさん
2017/07/28(金) 15:01:29.67ID:jw3NWySX >>805
可能か不可能かは、注文のビジネスルールにより決定される。
許可か不許可は、権限管理のビジネスルールにより決定される。
(要件によっては、注文のビジネスルールとする場合もあるかもしれない)
最終結論は「{許可 or 不許可} & {可能 or 不可能}」だ。
なにをごちゃごちゃ言ってるのか理解不能。
可能か不可能かは、注文のビジネスルールにより決定される。
許可か不許可は、権限管理のビジネスルールにより決定される。
(要件によっては、注文のビジネスルールとする場合もあるかもしれない)
最終結論は「{許可 or 不許可} & {可能 or 不可能}」だ。
なにをごちゃごちゃ言ってるのか理解不能。
807デフォルトの名無しさん
2017/07/28(金) 17:02:21.40ID:JfNEV5+1 バーカバーカ
808デフォルトの名無しさん
2017/07/28(金) 23:19:41.57ID:Gpi+7j1z809デフォルトの名無しさん
2017/07/29(土) 10:38:10.64ID:Suk8TZUZ >>808
権限だろ
権限だろ
810デフォルトの名無しさん
2017/07/29(土) 10:46:36.37ID:8lDGGI0L >809
権限だとしてその権限の条件は?
自分のIDと注文のIDが一致しているか?っていう
条件を何処かでやらないといけないよね?
権限だとしてその権限の条件は?
自分のIDと注文のIDが一致しているか?っていう
条件を何処かでやらないといけないよね?
811デフォルトの名無しさん
2017/07/29(土) 10:47:10.63ID:8lDGGI0L × 条件を何処かでやらないといけないよね?
○ 条件判定を何処かでやらないといけないよね?
その条件判定はどのメソッドにあるの?
○ 条件判定を何処かでやらないといけないよね?
その条件判定はどのメソッドにあるの?
812デフォルトの名無しさん
2017/07/29(土) 10:47:36.61ID:8lDGGI0L orz
× その条件判定はどのメソッドにあるの?
○ その条件判定はどのオブジェクトのメソッドでやるの?
× その条件判定はどのメソッドにあるの?
○ その条件判定はどのオブジェクトのメソッドでやるの?
813あ
2017/07/29(土) 11:07:06.69ID:sarQXHNa >>806
違うんじゃねえの?
権限管理のビジネスルールで可能で注文のビジネスルールで不可能、は、結局どのビジネスルールに縛られてるのか、もう少し種類増えたら優先順位が出てくるはずじゃん。
許可されてるから可能なのか、可能だから許可されてるのかって話。
今2つだから単純な話で済んでるけど。
○○の、と頭につけずに、ルールの積によって可能か不可能で判断するほうがいいんじゃないの?
違うんじゃねえの?
権限管理のビジネスルールで可能で注文のビジネスルールで不可能、は、結局どのビジネスルールに縛られてるのか、もう少し種類増えたら優先順位が出てくるはずじゃん。
許可されてるから可能なのか、可能だから許可されてるのかって話。
今2つだから単純な話で済んでるけど。
○○の、と頭につけずに、ルールの積によって可能か不可能で判断するほうがいいんじゃないの?
814デフォルトの名無しさん
2017/07/29(土) 11:45:07.76ID:Suk8TZUZ >>813
言い方を変えよう。
注文のビジネスルールによる可/不可を「可能/不可能」と呼び
権限管理のビジネスルールによる可/不可を「許可/不許可」と呼ぶとしたとき、
「可能/不可能」と「許可/不許可」をごっちゃにしてはいけない。
> ルールの積によって可能か不可能で判断する
そのように説明したつもり。
> 今2つだから単純な話で済んでるけど。
増えたとしても、「それまでの判定結果」×「新しいルールによる結果」でしかないので、
組み合わせ爆発のような問題は起こらない。
言い方を変えよう。
注文のビジネスルールによる可/不可を「可能/不可能」と呼び
権限管理のビジネスルールによる可/不可を「許可/不許可」と呼ぶとしたとき、
「可能/不可能」と「許可/不許可」をごっちゃにしてはいけない。
> ルールの積によって可能か不可能で判断する
そのように説明したつもり。
> 今2つだから単純な話で済んでるけど。
増えたとしても、「それまでの判定結果」×「新しいルールによる結果」でしかないので、
組み合わせ爆発のような問題は起こらない。
815デフォルトの名無しさん
2017/07/29(土) 11:47:54.33ID:Suk8TZUZ816デフォルトの名無しさん
2017/07/29(土) 11:54:40.25ID:8lDGGI0L817デフォルトの名無しさん
2017/07/29(土) 11:56:51.52ID:8lDGGI0L >>813
> 今2つだから単純な話で済んでるけど。
そうなんだよね。
今は権限、特定のユーザーの情報だけで決まる話ばかりしてるけど、
他人の注文は取り消せないが、自分の注文だけは取り消せるみたいな
権限+ビジネススールの組み合わせで判定することもあるわけだ
> 今2つだから単純な話で済んでるけど。
そうなんだよね。
今は権限、特定のユーザーの情報だけで決まる話ばかりしてるけど、
他人の注文は取り消せないが、自分の注文だけは取り消せるみたいな
権限+ビジネススールの組み合わせで判定することもあるわけだ
818デフォルトの名無しさん
2017/07/29(土) 12:08:18.12ID:Suk8TZUZ >>817
> 今は権限、特定のユーザーの情報だけで決まる話ばかりしてるけど、
> 他人の注文は取り消せないが、自分の注文だけは取り消せるみたいな
> 権限+ビジネススールの組み合わせで判定することもあるわけだ
だからこそ、「可能/不可能」と「許可/不許可」はごっちゃに考えてはいけないと何度言ったら。
「可能/不可能」の実装は注文オブジェクトに、「許可/不許可」の実装は権限管理オブジェクトに、だ。
> 今は権限、特定のユーザーの情報だけで決まる話ばかりしてるけど、
> 他人の注文は取り消せないが、自分の注文だけは取り消せるみたいな
> 権限+ビジネススールの組み合わせで判定することもあるわけだ
だからこそ、「可能/不可能」と「許可/不許可」はごっちゃに考えてはいけないと何度言ったら。
「可能/不可能」の実装は注文オブジェクトに、「許可/不許可」の実装は権限管理オブジェクトに、だ。
819デフォルトの名無しさん
2017/07/29(土) 12:16:47.13ID:8lDGGI0L >>818
いや、カプセル化の考え方からすると、
権限管理オブジェクトの中で何やってるかは隠蔽されてるものなので
権限管理オブジェクトの中でビジネスロジックを呼んでいたとしても、
使う側からすれば、同じようにみえるわけですよ。
そもそも権限管理オブジェクトっていうのは名前が間違いで
一つの「権限+ビジネスロジック」管理オブジェクトとするべきなのですよ。
そしてその中で権限管理オブジェクトやビジネスロジックオブジェクトによる
チェックをするべきでしょうね。場合によってはここでどちらとも関係ない
チェックが入るかもしれません。例えばメンテ中で閲覧しかできないみたいな。
話が見えてきましたね。
あなたは全てを「権限管理オブジェクト」にごっちゃにしてはいけないと言ってる。
私は「権限管理オブジェクト」にごっちゃにはしてない。
ただし「権限管理オブジェクト」やビジネスロジックやその他を扱うオブジェクトを
統括する別のオブジェクトを作って、そこでごっちゃにしろと言ってる。
いや、カプセル化の考え方からすると、
権限管理オブジェクトの中で何やってるかは隠蔽されてるものなので
権限管理オブジェクトの中でビジネスロジックを呼んでいたとしても、
使う側からすれば、同じようにみえるわけですよ。
そもそも権限管理オブジェクトっていうのは名前が間違いで
一つの「権限+ビジネスロジック」管理オブジェクトとするべきなのですよ。
そしてその中で権限管理オブジェクトやビジネスロジックオブジェクトによる
チェックをするべきでしょうね。場合によってはここでどちらとも関係ない
チェックが入るかもしれません。例えばメンテ中で閲覧しかできないみたいな。
話が見えてきましたね。
あなたは全てを「権限管理オブジェクト」にごっちゃにしてはいけないと言ってる。
私は「権限管理オブジェクト」にごっちゃにはしてない。
ただし「権限管理オブジェクト」やビジネスロジックやその他を扱うオブジェクトを
統括する別のオブジェクトを作って、そこでごっちゃにしろと言ってる。
820デフォルトの名無しさん
2017/07/29(土) 12:20:56.80ID:8lDGGI0L ちなみに、ごっちゃにするメリットは
何かの処理ができない時、その理由がなにであるかを
意識する必要が無いということです。
理由は関係なく、単純な できる?できない?で表せるので
条件を書くところが少なくなって、コードがシンプルになります。
何かの処理ができない時、その理由がなにであるかを
意識する必要が無いということです。
理由は関係なく、単純な できる?できない?で表せるので
条件を書くところが少なくなって、コードがシンプルになります。
821デフォルトの名無しさん
2017/07/29(土) 12:25:24.83ID:JFgIXVoU class Rule {
public Rule (Order o, Kengen, k) {/*いつもの*/}
public cancel(){}
}
これでドヤ?
ワイが一番頭良いと思った
public Rule (Order o, Kengen, k) {/*いつもの*/}
public cancel(){}
}
これでドヤ?
ワイが一番頭良いと思った
822あ
2017/07/29(土) 12:42:22.90ID:sarQXHNa >>814
違う、ごっちゃにしたくてしてる訳ではない。
考えるのがめんどくさいからでも、混同してる訳でもない。
逆に、同じものに対する力の強さを、言葉を変えて別定義するのがおかしい。本質的には同じ物なんだから。
列挙するとまるで別のように見えるし、実際そういうシステム見たことあるが、闇が深すぎて設定だけで何人日かかるんだよこれってシステム。
力の強さにするか、ビットマスクにするか、列挙としてたくさんの積や和が可能な型とするかはおいといて、
それらは全部同じ結論の「可能/不可能」を表していて当然だと思う。
増えたとして、って、おかしいよ。今までの判定結果が、今回の判定結果と優先順位が違えば、増えた分全部再テストだよ。
システム整合性
在庫
オペレーター
みたいな3層のチェック条件に、負在庫を許すマネージャーなんて層を足したら、それは今までのシステム整合性→在庫→オペレーターの3層のチェックのどこにどう挟む気なの?
違う、ごっちゃにしたくてしてる訳ではない。
考えるのがめんどくさいからでも、混同してる訳でもない。
逆に、同じものに対する力の強さを、言葉を変えて別定義するのがおかしい。本質的には同じ物なんだから。
列挙するとまるで別のように見えるし、実際そういうシステム見たことあるが、闇が深すぎて設定だけで何人日かかるんだよこれってシステム。
力の強さにするか、ビットマスクにするか、列挙としてたくさんの積や和が可能な型とするかはおいといて、
それらは全部同じ結論の「可能/不可能」を表していて当然だと思う。
増えたとして、って、おかしいよ。今までの判定結果が、今回の判定結果と優先順位が違えば、増えた分全部再テストだよ。
システム整合性
在庫
オペレーター
みたいな3層のチェック条件に、負在庫を許すマネージャーなんて層を足したら、それは今までのシステム整合性→在庫→オペレーターの3層のチェックのどこにどう挟む気なの?
824デフォルトの名無しさん
2017/07/29(土) 13:30:56.05ID:JFgIXVoU826デフォルトの名無しさん
2017/07/29(土) 13:48:21.39ID:JFgIXVoU >>825
日本語でおk
日本語でおk
827あ
2017/07/29(土) 13:52:27.31ID:sarQXHNa829デフォルトの名無しさん
2017/07/29(土) 14:18:53.75ID:Suk8TZUZ >>819
> 権限管理オブジェクトの中で何やってるかは隠蔽されてるものなので
同じように、注文オブジェクトの内部のビジネスルールは隠蔽すべきではないですか?
> あなたは全てを「権限管理オブジェクト」にごっちゃにしてはいけないと言ってる。
違います。
注文そのものに対するビジネスルールと、それ以外(たとえば権限によるルール)をごっちゃに
してはいけないと言っています。
> ただし「権限管理オブジェクト」やビジネスロジックやその他を扱うオブジェクトを
> 統括する別のオブジェクトを作って、そこでごっちゃにしろと言ってる。
注文オブジェクトには、一切のビジネスルールの実装をしないということですか?
それには同意できませんね。
>>822
> 本質的には同じ物なんだから。
いえ、違います。オブジェクトの責務の話です。
> 権限管理オブジェクトの中で何やってるかは隠蔽されてるものなので
同じように、注文オブジェクトの内部のビジネスルールは隠蔽すべきではないですか?
> あなたは全てを「権限管理オブジェクト」にごっちゃにしてはいけないと言ってる。
違います。
注文そのものに対するビジネスルールと、それ以外(たとえば権限によるルール)をごっちゃに
してはいけないと言っています。
> ただし「権限管理オブジェクト」やビジネスロジックやその他を扱うオブジェクトを
> 統括する別のオブジェクトを作って、そこでごっちゃにしろと言ってる。
注文オブジェクトには、一切のビジネスルールの実装をしないということですか?
それには同意できませんね。
>>822
> 本質的には同じ物なんだから。
いえ、違います。オブジェクトの責務の話です。
830デフォルトの名無しさん
2017/07/29(土) 14:38:07.32ID:JFgIXVoU 何が嫌いかよりコードで自分を語れよ!!!
831デフォルトの名無しさん
2017/07/29(土) 14:57:48.59ID:Suk8TZUZ テストの話を少ししましょうか。
void foo() {
if (!check1()) {
return;
}
if (!check2()) {
return;
}
if (!check3()) {
return;
}
do_something();
}
というコードがあったとき、チェックが3つあるから2*2*2=8通りのテストをするのかという話です。
{check1, check2, check3, do_something}
{true, true, true, 実行される}
{true, true, false, -}
{true, false, -, -}
{false, -, -, -}
の4通りで済みます。
つまり、N個のcheckがあるとき、テストケースはN+1個でいいんです。
10個のチェックがあるとき、2~10=1024通りではなく11通りです。
組み合わせ爆発は起きません。
void foo() {
if (!check1()) {
return;
}
if (!check2()) {
return;
}
if (!check3()) {
return;
}
do_something();
}
というコードがあったとき、チェックが3つあるから2*2*2=8通りのテストをするのかという話です。
{check1, check2, check3, do_something}
{true, true, true, 実行される}
{true, true, false, -}
{true, false, -, -}
{false, -, -, -}
の4通りで済みます。
つまり、N個のcheckがあるとき、テストケースはN+1個でいいんです。
10個のチェックがあるとき、2~10=1024通りではなく11通りです。
組み合わせ爆発は起きません。
832デフォルトの名無しさん
2017/07/29(土) 15:05:20.10ID:JFgIXVoU 人間が仕事をするのだから
プログラムもそのモデルを模倣すればよい
Ningenクラスを作ろう
Ningenクラスを継承して
EigyoやKeiriクラスを作ればよい
ドヤ?
プログラムもそのモデルを模倣すればよい
Ningenクラスを作ろう
Ningenクラスを継承して
EigyoやKeiriクラスを作ればよい
ドヤ?
833デフォルトの名無しさん
2017/07/29(土) 16:38:06.09ID:8lDGGI0L >>831
組合せ爆発はどうあっても起こります。
重要なのは、テストするコストと価値を比べて
コストをかけてまでテストする価値はないという
コードにしてしまうことです。
テストしなくていい(する価値がない)コードが増えれば
テスト数の組合せ爆発を減らすことができます。
テストをしないためにはどうするかという話です。
組合せ爆発はどうあっても起こります。
重要なのは、テストするコストと価値を比べて
コストをかけてまでテストする価値はないという
コードにしてしまうことです。
テストしなくていい(する価値がない)コードが増えれば
テスト数の組合せ爆発を減らすことができます。
テストをしないためにはどうするかという話です。
834デフォルトの名無しさん
2017/07/29(土) 16:40:53.77ID:8lDGGI0L >>831
> の4通りで済みます。
それはホワイトボックステストであることが前提となっています。
なぜなら、チェックしている順番が1,2,3の順であることを
知っているからです。
チェックしている順番が1,2,3であるならば、
4通りで済みますが、ブラックボックステストであれば
どの順番でチェックしているかわからないので、
そのテストの個数では足りません。
> の4通りで済みます。
それはホワイトボックステストであることが前提となっています。
なぜなら、チェックしている順番が1,2,3の順であることを
知っているからです。
チェックしている順番が1,2,3であるならば、
4通りで済みますが、ブラックボックステストであれば
どの順番でチェックしているかわからないので、
そのテストの個数では足りません。
835デフォルトの名無しさん
2017/07/29(土) 16:53:18.88ID:Suk8TZUZ836デフォルトの名無しさん
2017/07/29(土) 17:04:43.91ID:8lDGGI0L837デフォルトの名無しさん
2017/07/29(土) 17:12:08.75ID:Suk8TZUZ >>836
要件が直交しているかどうかだよ。
・自分の注文しかキャンセルできない
・発送済みならキャンセルできない
これは直交した条件。
だから、ホワイトボックス・ブラックボックス関係なく、チェックの順番も関係なしに
・自分の発送されていない注文をキャンセルする
・自分の発送済みの注文をキャンセルする
・他人の注文をキャンセルする
というテストをすればいい。「他人の発想済みの注文をキャンセルする」テストは不要。
これが組み合わせ爆発が起こらない理由。
要件が直交しているかどうかだよ。
・自分の注文しかキャンセルできない
・発送済みならキャンセルできない
これは直交した条件。
だから、ホワイトボックス・ブラックボックス関係なく、チェックの順番も関係なしに
・自分の発送されていない注文をキャンセルする
・自分の発送済みの注文をキャンセルする
・他人の注文をキャンセルする
というテストをすればいい。「他人の発想済みの注文をキャンセルする」テストは不要。
これが組み合わせ爆発が起こらない理由。
838デフォルトの名無しさん
2017/07/29(土) 17:20:39.67ID:+ebLLQ0c あほコーダーが別々で実装している場合もあるかもしれないよ
839デフォルトの名無しさん
2017/07/29(土) 17:23:04.30ID:Suk8TZUZ840デフォルトの名無しさん
2017/07/29(土) 19:01:54.59ID:8lDGGI0L >>837
> というテストをすればいい。「他人の発想済みの注文をキャンセルする」テストは不要。
残念ながらそうとは限らないんだよね・・・
if (自分の注文か?) {
if (発送済みか?) {
return キャンセル可能
} else {
return キャンセル不可能
}
} else {
if (発送済みか?) {
return キャンセル不可能
} else {
return キャンセル可能 // バグ 本来はキャンセル不可能
}
}
これは「他人の発送済みの注文をキャンセルする」場合にバグが有るコード
> というテストをすればいい。「他人の発想済みの注文をキャンセルする」テストは不要。
残念ながらそうとは限らないんだよね・・・
if (自分の注文か?) {
if (発送済みか?) {
return キャンセル可能
} else {
return キャンセル不可能
}
} else {
if (発送済みか?) {
return キャンセル不可能
} else {
return キャンセル可能 // バグ 本来はキャンセル不可能
}
}
これは「他人の発送済みの注文をキャンセルする」場合にバグが有るコード
841デフォルトの名無しさん
2017/07/29(土) 19:20:58.86ID:mj0H/MXI842デフォルトの名無しさん
2017/07/29(土) 19:25:34.13ID:8lDGGI0L 単体テストとか言うよりも
「バグがないという前提において不要だと判断されたパターンはテストしなくて良い」
という考えは正しいかどうかって話だよな
「バグがないという前提において不要だと判断されたパターンはテストしなくて良い」
という考えは正しいかどうかって話だよな
843デフォルトの名無しさん
2017/07/29(土) 19:35:29.98ID:mj0H/MXI テストに前提を於いたらいけないのは、その通りだよね。
ただ、システムレベルだと、禁則にあたる項目が多いのも事実で、そもそもテスト出来なかったりするじゃん?
その事を指して、テスト数爆発は無い、って言ってるのなら、まあわからなくもないかなと。
ただ、システムレベルだと、禁則にあたる項目が多いのも事実で、そもそもテスト出来なかったりするじゃん?
その事を指して、テスト数爆発は無い、って言ってるのなら、まあわからなくもないかなと。
844デフォルトの名無しさん
2017/07/29(土) 19:44:14.29ID:8lDGGI0L テスト数は爆発するんだよ。どうあっても。残念ながらね。
それは認識しないといけない。
爆発してしまうテストを現実時間でどう扱うかというと
テストしないという選択肢を選ぶしか無ない
重要なのはそのテストしないという理由で
「バグがないという前提において不要だと判断されたパターンだから」は
バグを見つけるのが目的のテストとしては、テストしない理由としては適切ではない。
俺の理由は「テストする価値がないぐらい単純なものだから」
テストしなくてもバグがないのは明らかなものを作る
だからそういうものはテストしない
それは認識しないといけない。
爆発してしまうテストを現実時間でどう扱うかというと
テストしないという選択肢を選ぶしか無ない
重要なのはそのテストしないという理由で
「バグがないという前提において不要だと判断されたパターンだから」は
バグを見つけるのが目的のテストとしては、テストしない理由としては適切ではない。
俺の理由は「テストする価値がないぐらい単純なものだから」
テストしなくてもバグがないのは明らかなものを作る
だからそういうものはテストしない
845あ
2017/07/29(土) 19:47:19.90ID:sarQXHNa >>831
途中returnして何が積なんだよ。
そうじゃなくて、この権限ならばできる、をあとから足せる構造にせなばって言ってる。
ちなみに、普通はそれは2*2*2のテストをする。
何故ならば、どちらも、影響しないという担保を行うために。
たまにあるからね。ポインタや参照先が同じとこ向いてる不具合とか。
要はテストケースはその四通りでは足りない。
お前実務経験無いんじゃねえの?
こういう思考で間違ったオブジェクト指向を流行らせようとしてる奴こそが、本来のオブジェクト指向をディスってるような気がするわ。
途中returnして何が積なんだよ。
そうじゃなくて、この権限ならばできる、をあとから足せる構造にせなばって言ってる。
ちなみに、普通はそれは2*2*2のテストをする。
何故ならば、どちらも、影響しないという担保を行うために。
たまにあるからね。ポインタや参照先が同じとこ向いてる不具合とか。
要はテストケースはその四通りでは足りない。
お前実務経験無いんじゃねえの?
こういう思考で間違ったオブジェクト指向を流行らせようとしてる奴こそが、本来のオブジェクト指向をディスってるような気がするわ。
846デフォルトの名無しさん
2017/07/29(土) 19:50:59.46ID:mj0H/MXI テスト項目だけで考えたら、テスト爆発するのは間違いないよね。
横から入った自分にも、その点に異論反論は無いよ。
その上で、禁則を増やしてテスト爆発を小さく抑えるってのは有効だと思うけど、その点にも同意できないの?
横から入った自分にも、その点に異論反論は無いよ。
その上で、禁則を増やしてテスト爆発を小さく抑えるってのは有効だと思うけど、その点にも同意できないの?
847デフォルトの名無しさん
2017/07/29(土) 19:52:02.17ID:8lDGGI0L 禁則を増やしてってなんだよw
その禁則をコードにする時にバグがでるんだろうが
その禁則をコードにする時にバグがでるんだろうが
848デフォルトの名無しさん
2017/07/29(土) 19:53:07.60ID:mj0H/MXI 違う違う。
禁則ってのは、テスト不可能な条件のこと。
禁則ってのは、テスト不可能な条件のこと。
849デフォルトの名無しさん
2017/07/29(土) 19:56:58.62ID:8lDGGI0L 具体的にその条件とは?
もちろんテスト不可能な条件とやらがバグってる
可能性も忘れずに答えてくれ
もちろんテスト不可能な条件とやらがバグってる
可能性も忘れずに答えてくれ
850あ
2017/07/29(土) 20:09:17.42ID:sarQXHNa >>842
明らかに正しくないと思うよ。
思い込んで、そう動く事を意図して作ったものを、そう動くだろう、とテストする事は滅茶苦茶簡単だけど、
そう動く事を確認するなんて、そう動く事を意図して作ってるんだから当たり前の話。
意図せざる動きをしないかどうか、渡せるパラメータ全部渡して確認するのがテストだよ。
明らかに正しくないと思うよ。
思い込んで、そう動く事を意図して作ったものを、そう動くだろう、とテストする事は滅茶苦茶簡単だけど、
そう動く事を確認するなんて、そう動く事を意図して作ってるんだから当たり前の話。
意図せざる動きをしないかどうか、渡せるパラメータ全部渡して確認するのがテストだよ。
851デフォルトの名無しさん
2017/07/29(土) 20:11:18.96ID:1wOX1qLb853デフォルトの名無しさん
2017/07/29(土) 20:14:05.02ID:1wOX1qLb854あ
2017/07/29(土) 20:15:19.38ID:sarQXHNa855デフォルトの名無しさん
2017/07/29(土) 20:15:39.71ID:1wOX1qLb 単体テストだと、禁則はほとんど無いので、爆発するよね。
856デフォルトの名無しさん
2017/07/29(土) 20:16:14.28ID:1wOX1qLb859デフォルトの名無しさん
2017/07/29(土) 20:19:21.81ID:1wOX1qLb860あ
2017/07/29(土) 20:20:53.20ID:sarQXHNa861デフォルトの名無しさん
2017/07/29(土) 20:22:24.39ID:1wOX1qLb862あ
2017/07/29(土) 20:27:25.89ID:sarQXHNa >>861
うーん、噛み合ってないな。
総合試験を作るとき、網羅度はどうやって出すの?
それが本当にやらなくても、そのメソッド呼ばれようがない、という判定は誰がどうやるの?
そして、呼ばれなかった、という悪魔の証明をどう担保したいの?
うーん、噛み合ってないな。
総合試験を作るとき、網羅度はどうやって出すの?
それが本当にやらなくても、そのメソッド呼ばれようがない、という判定は誰がどうやるの?
そして、呼ばれなかった、という悪魔の証明をどう担保したいの?
863デフォルトの名無しさん
2017/07/29(土) 20:40:03.01ID:1wOX1qLb864あ
2017/07/29(土) 21:35:46.74ID:sarQXHNa こんなレベルで総合試験どころか結合試験して提出した奴は出禁にするレベルの酷さ。
865デフォルトの名無しさん
2017/07/29(土) 22:32:12.89ID:8lDGGI0L なるほど、不具合がないことを保証するための試験ではなくて、
想定された使い方をしている限り動く
変な使い方をしなければ動く
ことを保証するテストなんだな。
想定外の操作をして問題が起きたら
それは間違った使い方をしたユーザーの責任
想定された使い方をしている限り動く
変な使い方をしなければ動く
ことを保証するテストなんだな。
想定外の操作をして問題が起きたら
それは間違った使い方をしたユーザーの責任
866デフォルトの名無しさん
2017/07/30(日) 01:31:32.32ID:KXbv0POf 当たり前だろ
バカで低脳で使われるだけのユーザごときが偉そうにするな
ゴマスリしか能の無い、ちょっとコミュ力がSEより高いだけでプログラム1行も書けない下級生物は
大人しくしてろゴミ
バカで低脳で使われるだけのユーザごときが偉そうにするな
ゴマスリしか能の無い、ちょっとコミュ力がSEより高いだけでプログラム1行も書けない下級生物は
大人しくしてろゴミ
867デフォルトの名無しさん
2017/07/30(日) 02:54:09.22ID:Vcbd8R0/ ひどいコミュ障の自演を見てるようだ
ID:sarQXHNa
ID:8lDGGI0L
はトラブルメーカー
言ってることは正しい
しかし、そんなことは当たり前すぎるので、更にその上の議論をしようとしている人間に対して、全く話を理解せず頭ごなしに罵倒
狭い世界でお山の大将気取ってるコーダータイプ
多分、自分は悪くない、頭の悪い周りが悪いと思いこんでいる
ID:sarQXHNa
ID:8lDGGI0L
はトラブルメーカー
言ってることは正しい
しかし、そんなことは当たり前すぎるので、更にその上の議論をしようとしている人間に対して、全く話を理解せず頭ごなしに罵倒
狭い世界でお山の大将気取ってるコーダータイプ
多分、自分は悪くない、頭の悪い周りが悪いと思いこんでいる
868デフォルトの名無しさん
2017/07/30(日) 03:44:40.37ID:MHvXlxdG869デフォルトの名無しさん
2017/07/30(日) 08:39:37.81ID:J6wXHp7u >>865
そのシステムは扱いたくないなぁ
そのシステムは扱いたくないなぁ
870デフォルトの名無しさん
2017/07/30(日) 10:22:01.39ID:KXbv0POf >>867こいつが一番コミュ障でFA
871あ
2017/07/30(日) 13:00:21.91ID:yy9Kp6PA■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 俺「お湯を流してと…」シンク「ボンッw」
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- もう寝ます
- さすがに広告の煽りエグくね?
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
