前スレ
オブジェクト指向システムの設計 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+O487あ
2017/07/16(日) 16:54:43.58ID:bf3wtQLD ジョブと名前を付けてジョブで管理してるってどういう事かまだイマイチわからん。
ジョブはジョブで、巨大で膨大なキューが積まれるようなシステムでもない限り2つも3つも立てない、むしろ立てたらロック周り辛くなるからやりたくない、いわゆるジョブなんだけど。
ジョブは、一つのキューに対して、一つのアトミックな操作をする。その入力がオーダーとオペレーションの組み合わせで、そのオーダーとオペレーションによって、処理を行う、行わない、エラーにする、と処理をして、新しい状態のオーダーを記録する。
ただそれだけ。
シングルユーザでも同じ設計でやっとったがなぁ。
ってか書きながら思ったけど、今JSの世界で流行ってるReactのデータ周りそっくりだな。
ジョブはジョブで、巨大で膨大なキューが積まれるようなシステムでもない限り2つも3つも立てない、むしろ立てたらロック周り辛くなるからやりたくない、いわゆるジョブなんだけど。
ジョブは、一つのキューに対して、一つのアトミックな操作をする。その入力がオーダーとオペレーションの組み合わせで、そのオーダーとオペレーションによって、処理を行う、行わない、エラーにする、と処理をして、新しい状態のオーダーを記録する。
ただそれだけ。
シングルユーザでも同じ設計でやっとったがなぁ。
ってか書きながら思ったけど、今JSの世界で流行ってるReactのデータ周りそっくりだな。
488デフォルトの名無しさん
2017/07/16(日) 17:04:33.91ID:J7GQwUvr >>486
認可ではない
もしかして言葉が悪いのかな
「できる/できない」と表現すべきではなかったか
認可は「して良い/してはいけない」だな
して良い/していけないとは全く別の次元で、そもそもその処理そのものが成立するかしないかという判定があるだろう
それがモデルの不変条件だ
100円に20グラムを足すような処理は権限に関わらず成立しない
発注していない注文をキャンセルする処理は権限に関わらず成立しない
認可がなくてもシステムは成立する
全員が全ての機能を使用できるだけ
実際そういうシステムはいくらでもあるし作れるよ
認可がないとシステムが崩壊すると君が認識する理由はね
君の作るシステムは認可と不変条件がごちゃ混ぜになっているからだよ
認可ではない
もしかして言葉が悪いのかな
「できる/できない」と表現すべきではなかったか
認可は「して良い/してはいけない」だな
して良い/していけないとは全く別の次元で、そもそもその処理そのものが成立するかしないかという判定があるだろう
それがモデルの不変条件だ
100円に20グラムを足すような処理は権限に関わらず成立しない
発注していない注文をキャンセルする処理は権限に関わらず成立しない
認可がなくてもシステムは成立する
全員が全ての機能を使用できるだけ
実際そういうシステムはいくらでもあるし作れるよ
認可がないとシステムが崩壊すると君が認識する理由はね
君の作るシステムは認可と不変条件がごちゃ混ぜになっているからだよ
489あ
2017/07/16(日) 17:15:57.42ID:bf3wtQLD >>488
処理が成立しない事を、行っても良い、のであれば「認可ではない」と認めざるを得ないが、
「処理が成立しないからその処理を行うことは無い」のであれば、
処理を行うことがない理由は、「処理が成立しないから行ってはいけない」だけの話じゃん。
事実としては、100円に20グラムをどうしても足したいなら、そのロジック作るしかないんだから、もはやその置き場所が無いモデル化は余計に間違ってるとしか言い様が無いわ。
2ダース足して1個引くとか、単位系読み替え程度ならいくらでもホントにあるしな。
コード××100mgにコード○○を1アンプル足したものとかザラ。
俺のシステムは崩壊しないよw
そっちが「崩壊する」と言うから、対偶を取って見せただけなんだけど。
ごちゃまぜどころか、不変条件なのに変えなければいけない事すらあるんだから。運用では。
だから、不変条件は変更できない、なんて自己言及して定義してあるんだよ。
勝ちたいだけならもうやめとけよ。哀れだから。
処理が成立しない事を、行っても良い、のであれば「認可ではない」と認めざるを得ないが、
「処理が成立しないからその処理を行うことは無い」のであれば、
処理を行うことがない理由は、「処理が成立しないから行ってはいけない」だけの話じゃん。
事実としては、100円に20グラムをどうしても足したいなら、そのロジック作るしかないんだから、もはやその置き場所が無いモデル化は余計に間違ってるとしか言い様が無いわ。
2ダース足して1個引くとか、単位系読み替え程度ならいくらでもホントにあるしな。
コード××100mgにコード○○を1アンプル足したものとかザラ。
俺のシステムは崩壊しないよw
そっちが「崩壊する」と言うから、対偶を取って見せただけなんだけど。
ごちゃまぜどころか、不変条件なのに変えなければいけない事すらあるんだから。運用では。
だから、不変条件は変更できない、なんて自己言及して定義してあるんだよ。
勝ちたいだけならもうやめとけよ。哀れだから。
490デフォルトの名無しさん
2017/07/16(日) 17:23:09.26ID:J7GQwUvr >>487
わかってるよ
リクエストを受け取るとデータと処理のペアをキューイングする
ジョブがキューをポーリングして実際の処理を行う
っていう古臭いシステムの話でしょ
ぜんっぜん関係ないよね
キュー使おうがイベント使おうがAwait使おうが直列に処理しようが並列に処理しようが今の話題にとってはどうでもいいでしょ
わかってるよ
リクエストを受け取るとデータと処理のペアをキューイングする
ジョブがキューをポーリングして実際の処理を行う
っていう古臭いシステムの話でしょ
ぜんっぜん関係ないよね
キュー使おうがイベント使おうがAwait使おうが直列に処理しようが並列に処理しようが今の話題にとってはどうでもいいでしょ
491デフォルトの名無しさん
2017/07/16(日) 17:28:10.27ID:Unh0LZY1 >>483
> どの状態の場合は、誰が何が出来る、をバラバラに作ると収拾がつかなくなる、って事が言いたい。
「どの状態のときに何ができる/できない」と、「誰が何をできる/できない」をごっちゃにするなって
みんな言ってるのに、まだわからないかな
> どの状態の場合は、誰が何が出来る、をバラバラに作ると収拾がつかなくなる、って事が言いたい。
「どの状態のときに何ができる/できない」と、「誰が何をできる/できない」をごっちゃにするなって
みんな言ってるのに、まだわからないかな
492デフォルトの名無しさん
2017/07/16(日) 17:39:04.15ID:J7GQwUvr >>489
成立しないから行なっては「いけない」のではなくて
成立しないから行うことが「不可能」な
100円に20グラムを足すことは不可能なので実行しようがないので権限の問題ではない
ダースと個数は可換なので足し算引き算を定義することが「可能」で誰であっても実行「可能」だ
しかしそういう機能をユーザーによって実行して良いかどうかを切り替えたいならそれは認可の問題だ
しかし君のシステムでは定義することが可能かどうかを認可の問題にすり替えている
コードxx100mgにコードyyを1アンプル足すは「足す」の意味から違うじゃん
化学計算的な意味での足すじゃなく薬液を混ぜるの意味での「足す」
あるいは注文カートにxxとyyを足すといったようなパッケージング処理の「足す」
などそういった意味で「足す」だろう
そう意味での「足す」は実装可能で誰でも実行「可能」だ
そういう機能をユーザーによって実行して良いかどうかを切り替えたいならそれは認可の問題だ
しかし君のシステムでは定義することが可能かどうかを認可の問題にすり替えている
君のシステムは崩壊目前なので一度誰かにレビューしてもらった方がいい
成立しないから行なっては「いけない」のではなくて
成立しないから行うことが「不可能」な
100円に20グラムを足すことは不可能なので実行しようがないので権限の問題ではない
ダースと個数は可換なので足し算引き算を定義することが「可能」で誰であっても実行「可能」だ
しかしそういう機能をユーザーによって実行して良いかどうかを切り替えたいならそれは認可の問題だ
しかし君のシステムでは定義することが可能かどうかを認可の問題にすり替えている
コードxx100mgにコードyyを1アンプル足すは「足す」の意味から違うじゃん
化学計算的な意味での足すじゃなく薬液を混ぜるの意味での「足す」
あるいは注文カートにxxとyyを足すといったようなパッケージング処理の「足す」
などそういった意味で「足す」だろう
そう意味での「足す」は実装可能で誰でも実行「可能」だ
そういう機能をユーザーによって実行して良いかどうかを切り替えたいならそれは認可の問題だ
しかし君のシステムでは定義することが可能かどうかを認可の問題にすり替えている
君のシステムは崩壊目前なので一度誰かにレビューしてもらった方がいい
493デフォルトの名無しさん
2017/07/16(日) 17:40:22.64ID:7YnVXBSW > 「どの状態のときに何ができる/できない」と、「誰が何をできる/できない」をごっちゃにするなって
どの状態=ログインしているアカウントの状態
と考えれば、同じこと
どの状態=ログインしているアカウントの状態
と考えれば、同じこと
494デフォルトの名無しさん
2017/07/16(日) 17:50:14.74ID:7YnVXBSW >>486
> その不変条件自体が、システムの整合性を保つために設計者によって行われた「認可」そのものではないの?
違う。例えば構文が正しい場合のみコンパイラはコードをコンパイルするが
これは「コードが正しいと認可した」などとは言わない。
日本語の問題。日本語が間違っている。
> その不変条件自体が、システムの整合性を保つために設計者によって行われた「認可」そのものではないの?
違う。例えば構文が正しい場合のみコンパイラはコードをコンパイルするが
これは「コードが正しいと認可した」などとは言わない。
日本語の問題。日本語が間違っている。
495デフォルトの名無しさん
2017/07/16(日) 17:52:11.91ID:J7GQwUvr >>493
それはアカウントと他のものをごちゃ混ぜにした考え方
まずはそれを分離して考えてくれ
アカウントのできるできないと他のもののできるできないは別に考えよう
その上で今はアカウントの話をしてないのでそっちについては忘れよう
ただそれだけなんだけどなんでわからないかなぁ
それはアカウントと他のものをごちゃ混ぜにした考え方
まずはそれを分離して考えてくれ
アカウントのできるできないと他のもののできるできないは別に考えよう
その上で今はアカウントの話をしてないのでそっちについては忘れよう
ただそれだけなんだけどなんでわからないかなぁ
496デフォルトの名無しさん
2017/07/16(日) 17:53:47.54ID:7YnVXBSW 呼んではいけないメソッド
存在しないメソッド
使用が許可されてないメソッド
バグが有るメソッド
どのメソッドであっても(コンパイルエラーにならない場合は)
実行エラーになるが、その全てが認可エラーではない。
実行した結果、認可エラーになるものはあるが、
それは実行時エラーの特殊な場合
実行時エラーを継承して認可エラーを作るのであって
認可エラーを継承して、その他の実行時エラーを作るわけではない
存在しないメソッド
使用が許可されてないメソッド
バグが有るメソッド
どのメソッドであっても(コンパイルエラーにならない場合は)
実行エラーになるが、その全てが認可エラーではない。
実行した結果、認可エラーになるものはあるが、
それは実行時エラーの特殊な場合
実行時エラーを継承して認可エラーを作るのであって
認可エラーを継承して、その他の実行時エラーを作るわけではない
497デフォルトの名無しさん
2017/07/16(日) 17:54:20.87ID:J7GQwUvr そのうちE = mc^2はアインシュタインが認可した法則だ
などと言いだしそうだなこいつ
などと言いだしそうだなこいつ
498デフォルトの名無しさん
2017/07/16(日) 17:58:03.77ID:7YnVXBSW >>495
「どの状態のときに何ができる/できない」と、「誰が何をできる/できない」
この2つを分離するのは間違ってる。
どの状態?という、大きな枠組みとして状態のチェックが有り、
その状態チェックの中の一つとして
・数字チェック
・範囲チェック
・整合性チェック
・権限チェック
などがある。
誰が何をできる/できないというのも、
状態のチェックにすぎない。
「どの状態のときに何ができる/できない」と、「誰が何をできる/できない」
この2つを分離するのは間違ってる。
どの状態?という、大きな枠組みとして状態のチェックが有り、
その状態チェックの中の一つとして
・数字チェック
・範囲チェック
・整合性チェック
・権限チェック
などがある。
誰が何をできる/できないというのも、
状態のチェックにすぎない。
499デフォルトの名無しさん
2017/07/16(日) 18:06:19.68ID:7YnVXBSW もちろん、100円に20グラムを足すことは不可能とかいうのは
状態のチェックじゃないぞ。
まあ無理やり考えれば、あるオブジェクトがあって、
そのオブジェクトが数値だけではなく単位まで状態として持っているのであれば、
オブジェクトとオブジェクトの加算で状態(単位が同じであること)と
みなすことも可能だがねw
状態のチェックじゃないぞ。
まあ無理やり考えれば、あるオブジェクトがあって、
そのオブジェクトが数値だけではなく単位まで状態として持っているのであれば、
オブジェクトとオブジェクトの加算で状態(単位が同じであること)と
みなすことも可能だがねw
500デフォルトの名無しさん
2017/07/16(日) 18:08:20.22ID:J7GQwUvr >>498
つまり内容はともかく全部チェック処理だからチェック処理というグループを作ってそこにまとめてぶちこめ
権限のチェックもオーダーの状態のチェックも単位系のチェックも全てチェック処理だからチェック処理のグループでまとめて考えろ
そういうことを言いたいのか?
つまり内容はともかく全部チェック処理だからチェック処理というグループを作ってそこにまとめてぶちこめ
権限のチェックもオーダーの状態のチェックも単位系のチェックも全てチェック処理だからチェック処理のグループでまとめて考えろ
そういうことを言いたいのか?
501デフォルトの名無しさん
2017/07/16(日) 18:11:01.44ID:7YnVXBSW >>497
そういうこと。
カッコつけて「認可」なんて単語を使ってるのが悪い。
単に「状態チェック」と言えば良いんだよ。
状態チェックの中の一項目として認可が存在する。
なのに状態チェックを認可なんて
カッコつけて呼ぶから、みんなから突っ込まれてる。
ドヤ太郎「引数が数字であることを認可する!」
そういうこと。
カッコつけて「認可」なんて単語を使ってるのが悪い。
単に「状態チェック」と言えば良いんだよ。
状態チェックの中の一項目として認可が存在する。
なのに状態チェックを認可なんて
カッコつけて呼ぶから、みんなから突っ込まれてる。
ドヤ太郎「引数が数字であることを認可する!」
502デフォルトの名無しさん
2017/07/16(日) 18:13:20.36ID:J7GQwUvr >>499
芝を付けるようなおかしな話か?
単位系を付けるパターンは珍しいことではない
特に金を扱うシステムで国際化する場合には量と単位を持ったお金クラスの使用は必須と言ってよい
プリミティブクラスをクラスでラップしろというプラクティスはあまりにも有名だが
それはこういった単位と量の取り扱いをより厳密に実践せよということだぞ
芝を付けるようなおかしな話か?
単位系を付けるパターンは珍しいことではない
特に金を扱うシステムで国際化する場合には量と単位を持ったお金クラスの使用は必須と言ってよい
プリミティブクラスをクラスでラップしろというプラクティスはあまりにも有名だが
それはこういった単位と量の取り扱いをより厳密に実践せよということだぞ
503デフォルトの名無しさん
2017/07/16(日) 18:14:14.91ID:7YnVXBSW >>500
> チェック処理のグループ
チェック処理のグループってなんだよw
何かの処理(メソッド)を実行した時、
それが実行可能かどうかチェックするってだけだろ
その内容なんてどうでもいいわw
俺が言ってるのは実行可能かチェックすることを
「認可」って名前で呼ぶなって言ってるだけ
> チェック処理のグループ
チェック処理のグループってなんだよw
何かの処理(メソッド)を実行した時、
それが実行可能かどうかチェックするってだけだろ
その内容なんてどうでもいいわw
俺が言ってるのは実行可能かチェックすることを
「認可」って名前で呼ぶなって言ってるだけ
504デフォルトの名無しさん
2017/07/16(日) 18:16:13.57ID:7YnVXBSW505デフォルトの名無しさん
2017/07/16(日) 18:19:22.54ID:J7GQwUvr506デフォルトの名無しさん
2017/07/16(日) 18:21:05.03ID:J7GQwUvr507デフォルトの名無しさん
2017/07/16(日) 18:24:33.89ID:7YnVXBSW508デフォルトの名無しさん
2017/07/16(日) 18:25:50.70ID:7YnVXBSW 特別扱いするというのなら、
セキュリティに関する部分は
単純な比較命令や条件分岐命令を使うのではなく
専用の機能を使うべきでしょう?
でも、コードからすれば何ら特別扱いは
されていませんよね?
セキュリティに関する部分は
単純な比較命令や条件分岐命令を使うのではなく
専用の機能を使うべきでしょう?
でも、コードからすれば何ら特別扱いは
されていませんよね?
509デフォルトの名無しさん
2017/07/16(日) 18:40:06.18ID:J7GQwUvr510デフォルトの名無しさん
2017/07/16(日) 18:42:18.52ID:J7GQwUvr511デフォルトの名無しさん
2017/07/16(日) 18:43:47.33ID:7YnVXBSW512デフォルトの名無しさん
2017/07/16(日) 18:43:48.37ID:J7GQwUvr513デフォルトの名無しさん
2017/07/16(日) 18:44:50.67ID:7YnVXBSW514デフォルトの名無しさん
2017/07/16(日) 18:46:02.72ID:7YnVXBSW515デフォルトの名無しさん
2017/07/16(日) 18:47:23.57ID:J7GQwUvr516デフォルトの名無しさん
2017/07/16(日) 18:50:37.56ID:7YnVXBSW > セキュリティ事故を起こすと金もかかるし信用も失う
東証の誤発注事件、セキュリティとは関係なかったよなw
セキュリティでなければ、お金や信用は失わないと?
東証の誤発注事件、セキュリティとは関係なかったよなw
セキュリティでなければ、お金や信用は失わないと?
517デフォルトの名無しさん
2017/07/16(日) 18:50:54.68ID:J7GQwUvr >>514
その処理にビジネス上のメリットがあるとは思えないが好きにすればいいよ
その処理にビジネス上のメリットがあるとは思えないが好きにすればいいよ
518デフォルトの名無しさん
2017/07/16(日) 18:52:34.86ID:7YnVXBSW >>515
> 文字列のパターンマッチ検証と
文字列のパターンマッチ検証のバグで
大損害を起こすことも考えられるからな。
重要かどうかは、やってる処理内容ではない。
やっている場所だ。
どちらもチェック処理であることは明白
重要な箇所のチェック処理であるかどうかの違いがあるだけ
> 文字列のパターンマッチ検証と
文字列のパターンマッチ検証のバグで
大損害を起こすことも考えられるからな。
重要かどうかは、やってる処理内容ではない。
やっている場所だ。
どちらもチェック処理であることは明白
重要な箇所のチェック処理であるかどうかの違いがあるだけ
519デフォルトの名無しさん
2017/07/16(日) 18:53:52.09ID:7YnVXBSW >>517
> その処理にビジネス上のメリットがあるとは思えないが好きにすればいいよ
それはお前が思いつかないってだけだろう?
例えば中古買取システムだと、衣類はグラム単位で買い取り価格が決まるとか
あるわけだが。
> その処理にビジネス上のメリットがあるとは思えないが好きにすればいいよ
それはお前が思いつかないってだけだろう?
例えば中古買取システムだと、衣類はグラム単位で買い取り価格が決まるとか
あるわけだが。
520デフォルトの名無しさん
2017/07/16(日) 18:58:12.52ID:J7GQwUvr >>516
学生さんじゃないな
小学生か
どんな処理でも事故を起こせばペナルティの可能性はある
とはいえ事故の種類によって確率も被害額も異なる
セキュリティ事故は注意していなければ事故を起こしやすく被害額も大きい
つまり対策に投資する価値が大きな分野ってこと
学生さんじゃないな
小学生か
どんな処理でも事故を起こせばペナルティの可能性はある
とはいえ事故の種類によって確率も被害額も異なる
セキュリティ事故は注意していなければ事故を起こしやすく被害額も大きい
つまり対策に投資する価値が大きな分野ってこと
521デフォルトの名無しさん
2017/07/16(日) 18:58:44.34ID:J7GQwUvr522デフォルトの名無しさん
2017/07/16(日) 19:00:58.74ID:7YnVXBSW523デフォルトの名無しさん
2017/07/16(日) 19:01:38.94ID:J7GQwUvr >>519
そういうドメインがあったとしても円とグラムの足し算を定義するメリットはない
混乱するだけだからエラーになるようにしろ
古着の重量から取引価格を問い合わせるサービスを書け
問い合わで得た価格を足し算しろ
その方がずっとわかりやすい
そういうドメインがあったとしても円とグラムの足し算を定義するメリットはない
混乱するだけだからエラーになるようにしろ
古着の重量から取引価格を問い合わせるサービスを書け
問い合わで得た価格を足し算しろ
その方がずっとわかりやすい
524デフォルトの名無しさん
2017/07/16(日) 19:06:15.16ID:J7GQwUvr525デフォルトの名無しさん
2017/07/16(日) 19:26:57.71ID:Unh0LZY1 そろそろコードでしゃべれ
526デフォルトの名無しさん
2017/07/16(日) 19:54:32.08ID:zK8m4Miw 白黒つけるなら、前提条件が分からんと何がベターか分からん。
要件定義書持ってこい。
要件定義書持ってこい。
527デフォルトの名無しさん
2017/07/16(日) 20:04:35.46ID:yM+ti3sc 「不可能」でも「状態チェック」でも「認可」でも何でもいいんで
それはコンパイラがコンパイル時に行うのか
それともコール自体を実行時に許さないのか
はたまたコールは許すけど結局弾くだけなのか
どれを想定するかで設計が変わるんで
出題者はそろそろ答えてくれまいか
それはコンパイラがコンパイル時に行うのか
それともコール自体を実行時に許さないのか
はたまたコールは許すけど結局弾くだけなのか
どれを想定するかで設計が変わるんで
出題者はそろそろ答えてくれまいか
528あ
2017/07/16(日) 21:52:05.18ID:bPx1MEIf やっぱ「認可」って言葉に振り回されてんのな。
「これが俺の言う「認可」。お前が言ってるのはこれだろ?」に、そう呼びたいなら呼べばいいやと思ってその言葉使ってるだけで、
単純に言えば>>416でチェックって言うとる。
>>490
古臭かろうが生きているのは、変な話絶滅すべき理由が無いというそこそこ大切な理由がある。
>>491
ごっちゃにすべき話だよ。「この状態の時に何ができるか」は「誰が」をつけないと意味がない。
もちろん、「誰が」にも「この状態」にもワイルドカードが入ることもあるが。
>>492
その状態では誰でも出来ないよ。薬剤に薬剤部の承認が降りてて、実施者は医師ないし医師から指示を受けた看護師か薬剤師しかできん。
崩壊目前と言われても、もう俺が知ってるだけで12年は動いてるけどな。
サーバ側のモジュールは1989年の見たことあるわ。
>>527
コンパイル時に解決って発想がすごいな。
リリース時には、依存関係を一式リリースしないといかんのでは?と思ってしまう。
「これが俺の言う「認可」。お前が言ってるのはこれだろ?」に、そう呼びたいなら呼べばいいやと思ってその言葉使ってるだけで、
単純に言えば>>416でチェックって言うとる。
>>490
古臭かろうが生きているのは、変な話絶滅すべき理由が無いというそこそこ大切な理由がある。
>>491
ごっちゃにすべき話だよ。「この状態の時に何ができるか」は「誰が」をつけないと意味がない。
もちろん、「誰が」にも「この状態」にもワイルドカードが入ることもあるが。
>>492
その状態では誰でも出来ないよ。薬剤に薬剤部の承認が降りてて、実施者は医師ないし医師から指示を受けた看護師か薬剤師しかできん。
崩壊目前と言われても、もう俺が知ってるだけで12年は動いてるけどな。
サーバ側のモジュールは1989年の見たことあるわ。
>>527
コンパイル時に解決って発想がすごいな。
リリース時には、依存関係を一式リリースしないといかんのでは?と思ってしまう。
529デフォルトの名無しさん
2017/07/16(日) 22:48:41.11ID:X07S5niy 絵に描いたようなレガシーおじいちゃん
531デフォルトの名無しさん
2017/07/16(日) 23:15:04.45ID:2wo8gPgW 認可処理が本質的に複雑なシステムでうまく体系化できていないんだろうね
認可処理が体系化されてないシステムってアドホックな認可検証処理があちこちにばら撒かれて他の処理に紛れてしまうものなんだ
それで紛れちゃったから区別がつかなくなってしまったんだろう(少なくともメンテナの彼は区別が付いてない)
昔から世界中で問題視されて来た典型的なアンチパターンってわけ
多くの失敗例を反省して改善してきた答えが認可システムと他のロジックの分離なんだけど
これはその成果を取り入れる前の実験台になった世代のシステムだったということだね
認可処理が体系化されてないシステムってアドホックな認可検証処理があちこちにばら撒かれて他の処理に紛れてしまうものなんだ
それで紛れちゃったから区別がつかなくなってしまったんだろう(少なくともメンテナの彼は区別が付いてない)
昔から世界中で問題視されて来た典型的なアンチパターンってわけ
多くの失敗例を反省して改善してきた答えが認可システムと他のロジックの分離なんだけど
これはその成果を取り入れる前の実験台になった世代のシステムだったということだね
532あ
2017/07/16(日) 23:19:58.25ID:bPx1MEIf533あ
2017/07/16(日) 23:22:16.71ID:bPx1MEIf 要は、負けたくないんです、って言ってるんだよな?
オブジェクトとして、ステートフルで、操作の例外を自身がすべて処理するクラスは存在しても良い、と。
まーそれでいいよ。もう伝わんないだろうし。
無駄だわ。
オブジェクトとして、ステートフルで、操作の例外を自身がすべて処理するクラスは存在しても良い、と。
まーそれでいいよ。もう伝わんないだろうし。
無駄だわ。
534デフォルトの名無しさん
2017/07/16(日) 23:25:25.46ID:X07S5niy535デフォルトの名無しさん
2017/07/16(日) 23:29:13.66ID:2wo8gPgW >>532
他の検証処理と一緒くたにしてるんだろ
そういうのをアドホックっていうんだよ
そしてこのキューは関係ない
君の使ってるキューはジョブスケジューリングのためのものだろ
むしろこれに検証やロジックが結合しているならそれこそおかしな設計だよ
他の検証処理と一緒くたにしてるんだろ
そういうのをアドホックっていうんだよ
そしてこのキューは関係ない
君の使ってるキューはジョブスケジューリングのためのものだろ
むしろこれに検証やロジックが結合しているならそれこそおかしな設計だよ
536デフォルトの名無しさん
2017/07/16(日) 23:30:11.42ID:2wo8gPgW >>533
お前がそれをいうなよ
お前がそれをいうなよ
537デフォルトの名無しさん
2017/07/17(月) 00:17:18.40ID:Fkkap2CA 何の話してるか3行でまとめろ
状態をコンパイルで安全に実装する話じゃなかったのか?
状態をコンパイルで安全に実装する話じゃなかったのか?
540デフォルトの名無しさん
2017/07/17(月) 01:12:44.95ID:ka/V7JjN 何の話か分からないから仕切り直して、
議題をまとめて。
あと、ゴールも。
議題をまとめて。
あと、ゴールも。
541デフォルトの名無しさん
2017/07/17(月) 08:13:45.47ID:1hPCwKm/ よし議論を仕切り直すぞ
まず「認可」議論が何にこだわってるのか意味不明
100円と20グラムを足せないようにしたいなら
貨幣クラスと重量クラスを作って型チェックすればいい
品物を発送したら注文のキャンセル不可にしたいなら
ステートパターンとかで発送状態にして
キャンセル判定すればいい
ふつうは前者を実行したらエラーや例外にするし
後者はいちいちアプリごと落ちたらうざいので
「発送後はキャンセルできません」とか画面に表示する
んで、それだと何がダメで
じゃあどうしたらいいのか
さっぱり話が見えてこない
まず「認可」議論が何にこだわってるのか意味不明
100円と20グラムを足せないようにしたいなら
貨幣クラスと重量クラスを作って型チェックすればいい
品物を発送したら注文のキャンセル不可にしたいなら
ステートパターンとかで発送状態にして
キャンセル判定すればいい
ふつうは前者を実行したらエラーや例外にするし
後者はいちいちアプリごと落ちたらうざいので
「発送後はキャンセルできません」とか画面に表示する
んで、それだと何がダメで
じゃあどうしたらいいのか
さっぱり話が見えてこない
542デフォルトの名無しさん
2017/07/17(月) 08:31:31.91ID:1hPCwKm/ おそらく認可君が言いたいことを察すると
不変条件は不変だから
認証系と混同するなよってことかな
それ自体はそうだよ
100円と20グラムを足すような処理は
100パーセントないと断言できるから
コンパイルエラーで100パー弾いても構わない
それに対してキャンセルの話は
発送後も不良品であれば返品できるみたいに
実務では複雑な条件になるし変更もありうる
だからその判定が複雑なら
キャンセルクラスを作って判定するかな
それよりもっと高度な何かを求めてるなら
説明してもらわないと分からない
不変条件は不変だから
認証系と混同するなよってことかな
それ自体はそうだよ
100円と20グラムを足すような処理は
100パーセントないと断言できるから
コンパイルエラーで100パー弾いても構わない
それに対してキャンセルの話は
発送後も不良品であれば返品できるみたいに
実務では複雑な条件になるし変更もありうる
だからその判定が複雑なら
キャンセルクラスを作って判定するかな
それよりもっと高度な何かを求めてるなら
説明してもらわないと分からない
543デフォルトの名無しさん
2017/07/17(月) 08:49:02.13ID:vyn2jib/ >>541
その認識であってるよ
そこに「認証認可系とごちゃ混ぜにして処理しろ。分けて考えるな。キューイング!キューイング!」ってちょっと変な奴が絡んできたから「分けて考えるのが正解だし、そもそもそれ今関係ないだろ」って応酬を延々と続けていただけ
連休の2ちゃんではそういうことがままある
その認識であってるよ
そこに「認証認可系とごちゃ混ぜにして処理しろ。分けて考えるな。キューイング!キューイング!」ってちょっと変な奴が絡んできたから「分けて考えるのが正解だし、そもそもそれ今関係ないだろ」って応酬を延々と続けていただけ
連休の2ちゃんではそういうことがままある
544あ
2017/07/17(月) 11:33:50.06ID:6lVfk8iG だってなぁ。
ママゴト聞いてるみたいだもん。
ママゴト聞いてるみたいだもん。
545デフォルトの名無しさん
2017/07/17(月) 12:56:51.77ID:Fkkap2CA まーた論点が喧嘩になっちゃう
小学生か?ガイジか?
小学生か?ガイジか?
546デフォルトの名無しさん
2017/07/17(月) 13:06:08.92ID:orwW66DF547デフォルトの名無しさん
2017/07/17(月) 13:08:53.23ID:H+ZLTTJY > それに対してキャンセルの話は
> 発送後も不良品であれば返品できるみたいに
> 実務では複雑な条件になるし変更もありうる
それ返品の話ですよね?
キャンセルじゃないですよね?
> 発送後も不良品であれば返品できるみたいに
> 実務では複雑な条件になるし変更もありうる
それ返品の話ですよね?
キャンセルじゃないですよね?
548デフォルトの名無しさん
2017/07/17(月) 13:39:57.19ID:ZHrINvVG お互いに見下しあう口喧嘩に解のない無駄でしかないってのに
暇そうで羨ましいよ
暇そうで羨ましいよ
549デフォルトの名無しさん
2017/07/17(月) 14:34:06.46ID:orwW66DF 結局、"あ"氏にとってのオブジェクトの定義は、単なるデータスキーマでしかないということ
>>416
> 値を持ったデータの塊に生やしたメソッドでやるから話がややこしくなるのでは?
> 値は値なんだし。
> 値に何かさせたら、値自体が変わるってすごいめんどくさいと思う。
> しかも、何かさせられない状態すら持ってる。これヤバい。
で、対する一派は、オブジェクトは振る舞いを持っているしルールも持っているという認識
話は噛み合わないよ
>>416
> 値を持ったデータの塊に生やしたメソッドでやるから話がややこしくなるのでは?
> 値は値なんだし。
> 値に何かさせたら、値自体が変わるってすごいめんどくさいと思う。
> しかも、何かさせられない状態すら持ってる。これヤバい。
で、対する一派は、オブジェクトは振る舞いを持っているしルールも持っているという認識
話は噛み合わないよ
550あ
2017/07/17(月) 14:45:52.49ID:ql0cyt0N 俺も暇なのは確かだけど。
こんなに盛り上がるとはな。
まー、いにしえのナントカ、みたいなのは良くも悪くも「ちゃんと動く」から、いにしえのナントカとして未だに生きてるんだから、
無碍に否定してもきりがない。
ジョブシステムの致命的な欠点の「ジョブサーバが死んだら何も動かない」を突かれたら
「死なんように単機能なんだ。だから、どんな処理も「処理完了,処理結果:不正」という正常系でさばく必要がある」
としか言えないところだったのに、そこはスルーなのがわからん。
こんなに盛り上がるとはな。
まー、いにしえのナントカ、みたいなのは良くも悪くも「ちゃんと動く」から、いにしえのナントカとして未だに生きてるんだから、
無碍に否定してもきりがない。
ジョブシステムの致命的な欠点の「ジョブサーバが死んだら何も動かない」を突かれたら
「死なんように単機能なんだ。だから、どんな処理も「処理完了,処理結果:不正」という正常系でさばく必要がある」
としか言えないところだったのに、そこはスルーなのがわからん。
551あ
2017/07/17(月) 14:48:06.21ID:ql0cyt0N >>549
オブジェクトの定義は、「単なるデータスキーマ」であるか「単なるタスクの実装」であって、それ混ぜると収拾つかなくなるよ、なので、
単にオブジェクト指向を否定してるわけではない事だけ伝わってほしい。
オブジェクトの定義は、「単なるデータスキーマ」であるか「単なるタスクの実装」であって、それ混ぜると収拾つかなくなるよ、なので、
単にオブジェクト指向を否定してるわけではない事だけ伝わってほしい。
552あ
2017/07/17(月) 14:51:10.45ID:ql0cyt0N 継承と移譲も、インターフェイスと実装も、そのデータたちや、アクターのクラスたちの中でやる分には効果的だけど、
その線を踏み越えたらすべきじゃないと思うから、否定してるのかな。どうなんだろう。
その線を踏み越えたらすべきじゃないと思うから、否定してるのかな。どうなんだろう。
553デフォルトの名無しさん
2017/07/17(月) 14:59:23.48ID:ka/V7JjN あんまデータ自体に状態持たせないで、
状態に対応したテーブル用意して、キューで逐次処理する方がよくね。
そうすると、RDBとツリー階層で互換性もたせられて、色々対応づけるのに楽な場面があると思うんだよね。
発送前フォルダ、発送後フォルダとか。
キャンセルは発送前までの処理でしか受付ないし、返品は発送後2週間まで受け付けます。とか。
なんか商品に不具合あって返品したいなら、まずメールでやり取りすると思うし、その後の判断はメーカー側で行って、返品操作はメーカー側でやるでしょ。
で、返品の判断なんて難しいからシステムに組み込まないで、返品対応マニュアルをエンドユーザさんで用意してもらえば終わりでしょ。
状態に対応したテーブル用意して、キューで逐次処理する方がよくね。
そうすると、RDBとツリー階層で互換性もたせられて、色々対応づけるのに楽な場面があると思うんだよね。
発送前フォルダ、発送後フォルダとか。
キャンセルは発送前までの処理でしか受付ないし、返品は発送後2週間まで受け付けます。とか。
なんか商品に不具合あって返品したいなら、まずメールでやり取りすると思うし、その後の判断はメーカー側で行って、返品操作はメーカー側でやるでしょ。
で、返品の判断なんて難しいからシステムに組み込まないで、返品対応マニュアルをエンドユーザさんで用意してもらえば終わりでしょ。
554デフォルトの名無しさん
2017/07/17(月) 15:03:51.66ID:orwW66DF >>551
> オブジェクトの定義は、「単なるデータスキーマ」であるか「単なるタスクの実装」であって、それ混ぜると収拾つかなくなるよ、なので、
> 単にオブジェクト指向を否定してるわけではない事だけ伝わってほしい。
(少なくとも俺は)そのオブジェクトには「ルール」が欠けていると思う
「発注されたらもうキャンセルできない」もルールの一つ
そのルールを、注文というオブジェクトの外側で担保するというのなら、俺に言わせれば、
それなんのためのオブジェクトなのってことになる
C時代の構造体+手続き型コードと何ら変わりないでしょ
まぁ、俺が言いたいのはそれ以上でも以下でもないのだが
> オブジェクトの定義は、「単なるデータスキーマ」であるか「単なるタスクの実装」であって、それ混ぜると収拾つかなくなるよ、なので、
> 単にオブジェクト指向を否定してるわけではない事だけ伝わってほしい。
(少なくとも俺は)そのオブジェクトには「ルール」が欠けていると思う
「発注されたらもうキャンセルできない」もルールの一つ
そのルールを、注文というオブジェクトの外側で担保するというのなら、俺に言わせれば、
それなんのためのオブジェクトなのってことになる
C時代の構造体+手続き型コードと何ら変わりないでしょ
まぁ、俺が言いたいのはそれ以上でも以下でもないのだが
555デフォルトの名無しさん
2017/07/17(月) 15:11:58.17ID:H+ZLTTJY > ジョブシステムの致命的な欠点の「ジョブサーバが死んだら何も動かない」を突かれたら
ジョブスが死んだらAppleは何も動かないって
話かと思った
ジョブスが死んだらAppleは何も動かないって
話かと思った
556あ
2017/07/17(月) 15:56:37.16ID:ql0cyt0N >>554
オブジェクト指向は方法であって、目的じゃないよ。
Cの構造体でも、構造体にそんな関数ポインタ持たせたいと思わないし、
ルールってどっちが持ってるものなの?ってのはCで書いたときも同じように、構造体を弄る側に持たせる派と、構造体を使う側が気をつけて使うかでそれなりにモメる所かと。
構造体へのアクセスをすべてラッパで包む→一部の奴らがメンバが読めないじゃないかと言い出すが最終的におちつく
までは多分同じなんだけど、細かいプロジェクトだと
構造体へのアクセスをすべてラッパで包むし、そのラッパ関数があまりにも逸脱した操作はエラーにする
→喧嘩の後「『あまりにも逸脱した操作』を明文化せよ、そして常にメンテナンスせよ、そして業務フローやシステム改修時には無限に対応せよ」
のおふれが出て、言いだしたやつが泣き、保証はすべてそいつがする。
構造体へのアクセスをすべてラッパで包むが、ラッパは薄皮に留める
→喧嘩の後「各サブシステム屋はステートと分岐に対して100%の網羅度で試験せよ。さもなくば本系接続禁止」
のおふれが出て、全体が少しずつ泣くが、保証は各サブシステム屋が担保する
と、だいたいの流れがある。
後者の方は、保証する範囲や、データの整合性に関して、自然と疎になるので、いい意味でも悪い意味でも足切りしやすい。
オブジェクト指向は方法であって、目的じゃないよ。
Cの構造体でも、構造体にそんな関数ポインタ持たせたいと思わないし、
ルールってどっちが持ってるものなの?ってのはCで書いたときも同じように、構造体を弄る側に持たせる派と、構造体を使う側が気をつけて使うかでそれなりにモメる所かと。
構造体へのアクセスをすべてラッパで包む→一部の奴らがメンバが読めないじゃないかと言い出すが最終的におちつく
までは多分同じなんだけど、細かいプロジェクトだと
構造体へのアクセスをすべてラッパで包むし、そのラッパ関数があまりにも逸脱した操作はエラーにする
→喧嘩の後「『あまりにも逸脱した操作』を明文化せよ、そして常にメンテナンスせよ、そして業務フローやシステム改修時には無限に対応せよ」
のおふれが出て、言いだしたやつが泣き、保証はすべてそいつがする。
構造体へのアクセスをすべてラッパで包むが、ラッパは薄皮に留める
→喧嘩の後「各サブシステム屋はステートと分岐に対して100%の網羅度で試験せよ。さもなくば本系接続禁止」
のおふれが出て、全体が少しずつ泣くが、保証は各サブシステム屋が担保する
と、だいたいの流れがある。
後者の方は、保証する範囲や、データの整合性に関して、自然と疎になるので、いい意味でも悪い意味でも足切りしやすい。
557あ
2017/07/17(月) 16:10:16.78ID:ql0cyt0N >>554
もうちょっと具体的に言うと、
「注文」への「ある操作」が「無効」ならば例外とする、ってのは、注文が持つべきルールで良いと思う。
ただ、「注文へのある操作」を「無効」にするのは、注文の役目ではない。だから、「発注されたらキャンセルできない」はルールみたいだが、厳密にはルールじゃない。
『「発注」すると、「キャンセルすると言う操作」を無効にする』ってロジックが居て初めて、注文はキャンセルを無効と自分で判断できる、では無いか?
「キャンセルできなくする」は「発注」ロジックの役目で、注文が自発的にやるべき事じゃ無いと思う。
もうちょっと具体的に言うと、
「注文」への「ある操作」が「無効」ならば例外とする、ってのは、注文が持つべきルールで良いと思う。
ただ、「注文へのある操作」を「無効」にするのは、注文の役目ではない。だから、「発注されたらキャンセルできない」はルールみたいだが、厳密にはルールじゃない。
『「発注」すると、「キャンセルすると言う操作」を無効にする』ってロジックが居て初めて、注文はキャンセルを無効と自分で判断できる、では無いか?
「キャンセルできなくする」は「発注」ロジックの役目で、注文が自発的にやるべき事じゃ無いと思う。
558あ
2017/07/17(月) 16:13:19.86ID:ql0cyt0N そうすると、発注ロジック作るやつも、キャンセルロジック作るやつも、相手の事一切考えなくて済むのでは、と思うが。
単に、「できる状態ならば、する」だけになる。
やるべき処理が小さくなればなるほど、作りやすいし試験しやすいし、変なデータできた時に追いかけやすいじゃん。
単に、「できる状態ならば、する」だけになる。
やるべき処理が小さくなればなるほど、作りやすいし試験しやすいし、変なデータできた時に追いかけやすいじゃん。
559あ
2017/07/17(月) 16:18:33.43ID:ql0cyt0N あと、
できない状態ではない=できる、では無くて、
「できない状態を定義した時点で、できなかった状態」ではない=できる
に過ぎないから、
「発注されている場合はキャンセルできない」と否定文で動作の可否を定義すると、仕様を拡張する時にどっかで漏れるよ。
できない状態ではない=できる、では無くて、
「できない状態を定義した時点で、できなかった状態」ではない=できる
に過ぎないから、
「発注されている場合はキャンセルできない」と否定文で動作の可否を定義すると、仕様を拡張する時にどっかで漏れるよ。
560デフォルトの名無しさん
2017/07/17(月) 18:13:03.40ID:r495BSOU スレ違いなのでまだ続くようでしたらこちらでお願いします
手続き型システムの設計 1 [無断転載禁止]©2ch.net・
http://mevius.2ch.net/test/read.cgi/tech/1500282714/
手続き型システムの設計 1 [無断転載禁止]©2ch.net・
http://mevius.2ch.net/test/read.cgi/tech/1500282714/
561デフォルトの名無しさん
2017/07/17(月) 22:08:52.96ID:nNe3InXO あ?どこがスレチなんだコラ
563あ
2017/07/18(火) 01:39:10.12ID:r9TddzbB 見に行ったら、あっちでも言われてんじゃんw
564デフォルトの名無しさん
2017/07/18(火) 03:01:44.41ID:tId1dkJr >>562
文書読みづらいんで帰ってください。
文書読みづらいんで帰ってください。
565デフォルトの名無しさん
2017/07/18(火) 05:47:26.05ID:yansF8kz あさんあなたの方法論は誰が見ても手続き型ですよ
惨めな自演はやめた方がいいです
惨めな自演はやめた方がいいです
566デフォルトの名無しさん
2017/07/18(火) 05:51:49.29ID:j0qpHmEl567デフォルトの名無しさん
2017/07/18(火) 05:59:46.35ID:OEZUwdxD おまえらは日本語が下手すぎてコードが想像つかん
パブリックリポジトリにコードうpして議論しろ
パブリックリポジトリにコードうpして議論しろ
568デフォルトの名無しさん
2017/07/18(火) 07:00:15.06ID:H1BKDDhK569デフォルトの名無しさん
2017/07/18(火) 07:13:14.80ID:yansF8kz >>568
屁理屈こねてないで現実見ましょうね
屁理屈こねてないで現実見ましょうね
570デフォルトの名無しさん
2017/07/18(火) 07:14:37.59ID:H1BKDDhK571あ
2017/07/18(火) 08:21:46.73ID:zGBDd9F+ >>565
自演てw
そんなことせんでも俺はずーっと同じこと言ってるぞ。
誰かに名乗れと言われたから仕方なく「あ」とつけてるくらい。
オブジェクト指向であれば、手続き型ではない、
これ変だよね。
オブジェクト指向か、コンポーネント指向か、アスペクト指向か、etc,etcのモデル化のパラダイムと、
手続き型、関数型、純関数型、etc,etcの、スタイルや値の扱い方のパラダイムは、どう組み合わせたらどうなんて問題じゃないと思うが。
オブジェクト指向で関数型、もあるし、
オブジェクト指向ではない関数型もあるし、
オブジェクト指向で手続き型もあるし、
オブジェクト指向でメッセージドリブンな関数型も
オブジェクト指向でメッセージドリブンな手続き型もある中で、
なにを突っ込まれてるかわからん。
自分の定義が狭すぎるのでは?
自演てw
そんなことせんでも俺はずーっと同じこと言ってるぞ。
誰かに名乗れと言われたから仕方なく「あ」とつけてるくらい。
オブジェクト指向であれば、手続き型ではない、
これ変だよね。
オブジェクト指向か、コンポーネント指向か、アスペクト指向か、etc,etcのモデル化のパラダイムと、
手続き型、関数型、純関数型、etc,etcの、スタイルや値の扱い方のパラダイムは、どう組み合わせたらどうなんて問題じゃないと思うが。
オブジェクト指向で関数型、もあるし、
オブジェクト指向ではない関数型もあるし、
オブジェクト指向で手続き型もあるし、
オブジェクト指向でメッセージドリブンな関数型も
オブジェクト指向でメッセージドリブンな手続き型もある中で、
なにを突っ込まれてるかわからん。
自分の定義が狭すぎるのでは?
572デフォルトの名無しさん
2017/07/18(火) 09:07:26.16ID:tId1dkJr 色んな言葉知ってるんだ!
えらいねー。
これでいい?
誰かに褒めてもらいたいようにしか見えない。
ママのおっぱい離れして、小学校卒業するぐらいの文書能力がついたらまたきなよ。
えらいねー。
これでいい?
誰かに褒めてもらいたいようにしか見えない。
ママのおっぱい離れして、小学校卒業するぐらいの文書能力がついたらまたきなよ。
573あ
2017/07/18(火) 13:01:06.91ID:zGBDd9F+ なんだろう、この虚しさ。
褒めてもいらんし、むしろ間違ってたら指摘してほしいくらい(なので、>>566には割と納得感がある。最初からルールオブジェクト作ってるのと同じじゃん?と言う気持ちもあるが、そこは考え方と言うか俺が構え過ぎなのか、考えあぐねてる)
少なくとも、理解できないなら理解できない事を挙げてほしいが。
「小学校卒業するぐらいの文書能力」自体、無茶苦茶な日本語だと思うが。
文書は能力でないだろ。文書作成能力、もしくは文章力で、
能力に対して「ぐらい」って言うなら、前半は見込みや可能性、確度であるべきなんだから、「小学校卒業できるぐらい」にならなきゃいかんのでは?尤も小学校は日数で卒業できるが。
「ここに張り紙をするな」って張り紙みたいなみっともないのはやめてほしい。
褒めてもいらんし、むしろ間違ってたら指摘してほしいくらい(なので、>>566には割と納得感がある。最初からルールオブジェクト作ってるのと同じじゃん?と言う気持ちもあるが、そこは考え方と言うか俺が構え過ぎなのか、考えあぐねてる)
少なくとも、理解できないなら理解できない事を挙げてほしいが。
「小学校卒業するぐらいの文書能力」自体、無茶苦茶な日本語だと思うが。
文書は能力でないだろ。文書作成能力、もしくは文章力で、
能力に対して「ぐらい」って言うなら、前半は見込みや可能性、確度であるべきなんだから、「小学校卒業できるぐらい」にならなきゃいかんのでは?尤も小学校は日数で卒業できるが。
「ここに張り紙をするな」って張り紙みたいなみっともないのはやめてほしい。
574デフォルトの名無しさん
2017/07/18(火) 13:57:59.68ID:tId1dkJr そういうところじゃね。
揚げ足取りとか。
問題を解決したい訳でなく、議論ごっこをしたいだけに見えます。
だから、終わりがないし不毛です。
揚げ足取りとか。
問題を解決したい訳でなく、議論ごっこをしたいだけに見えます。
だから、終わりがないし不毛です。
575デフォルトの名無しさん
2017/07/18(火) 14:07:15.35ID:fE/UB1Gl そいつは重度の知ったか自己弁護野郎だから放置が一番
他のスレでも結局放置されてた
他のスレでも結局放置されてた
576デフォルトの名無しさん
2017/07/18(火) 16:08:09.93ID:ECiix6T1 >>557
> 『「発注」すると、「キャンセルすると言う操作」を無効にする』ってロジックが居て初めて、注文はキャンセルを無効と自分で判断できる、では無いか?
ごめん、書き間違えたよ
正しくは、「発送されたらもうキャンセルできない」
あと、無効にする処理をどこに実装するかの話はしていないよ
ルールの実装をどこにするかの話
class Order {
public bool isCancelable() {}
public void cancel() {}
}
client:
order = new Order();
if (order.isCancelable()) {
order.cancel();
}
というコードの場合、以下の点がよろしくない
・cancelの正しい手続きを呼び出し側が知っておく必要がある
・その手続きに変更があった場合、Order::cancel()を呼び出している箇所全部を修正しなければならない
・誤った呼び出しをしてしまうと、データに不整合が発生する
class Order {
private bool isCancelable() {}
public void cancel() {
}
}
> 『「発注」すると、「キャンセルすると言う操作」を無効にする』ってロジックが居て初めて、注文はキャンセルを無効と自分で判断できる、では無いか?
ごめん、書き間違えたよ
正しくは、「発送されたらもうキャンセルできない」
あと、無効にする処理をどこに実装するかの話はしていないよ
ルールの実装をどこにするかの話
class Order {
public bool isCancelable() {}
public void cancel() {}
}
client:
order = new Order();
if (order.isCancelable()) {
order.cancel();
}
というコードの場合、以下の点がよろしくない
・cancelの正しい手続きを呼び出し側が知っておく必要がある
・その手続きに変更があった場合、Order::cancel()を呼び出している箇所全部を修正しなければならない
・誤った呼び出しをしてしまうと、データに不整合が発生する
class Order {
private bool isCancelable() {}
public void cancel() {
}
}
577デフォルトの名無しさん
2017/07/18(火) 16:11:30.47ID:ECiix6T1 途中で書き込んでしまった
それに対して、オブジェクト自身がルールを持っていれば
class Order {
private bool isCancelable() {}
public void cancel() {
if (!isCancelable()) {
// エラー処理(例えば例外をthrow)
}
// 実際のキャンセル処理
}
}
client:
order = new Order();
try {
order.cancel();
} catch () {
}
クライアントは、
・cancelの正しい手続きを知る必要はなく、単に呼び出すだけ
・その手続きに変更があっても、呼び出し側は変更する必要がない
・誤った呼び出しもない
というメリットがある
それに対して、オブジェクト自身がルールを持っていれば
class Order {
private bool isCancelable() {}
public void cancel() {
if (!isCancelable()) {
// エラー処理(例えば例外をthrow)
}
// 実際のキャンセル処理
}
}
client:
order = new Order();
try {
order.cancel();
} catch () {
}
クライアントは、
・cancelの正しい手続きを知る必要はなく、単に呼び出すだけ
・その手続きに変更があっても、呼び出し側は変更する必要がない
・誤った呼び出しもない
というメリットがある
578デフォルトの名無しさん
2017/07/18(火) 16:14:53.99ID:ECiix6T1 一方、権限としての呼び出し可/不可の話はこれとは別
なぜなら、cancelの呼び出し権限があるかどうかは、Orderオブジェクト自身は知りようがないから
なぜなら、cancelの呼び出し権限があるかどうかは、Orderオブジェクト自身は知りようがないから
579デフォルトの名無しさん
2017/07/18(火) 16:18:09.27ID:ECiix6T1 もちろん、「自分の注文のみキャンセルできる」という単純な権限チェックなら、Orderモデルの範囲内で
チェックが可能なので、そう実装してもいい
class Order {
private bool isCancelable() {}
private string orderUserID() {}
public void cancel(string cancelUserID) {
if (!isCancelable()) {
// エラー処理(例えば例外をthrow)
}
if (orderUserID() != cancelUserID) {
// エラー処理(例えば例外をthrow)
}
// 実際のキャンセル処理
}
}
まあ大抵はロールによる権限管理とかのケースが多いだろうから、その場合はOrder自身は権限チェックできない
チェックが可能なので、そう実装してもいい
class Order {
private bool isCancelable() {}
private string orderUserID() {}
public void cancel(string cancelUserID) {
if (!isCancelable()) {
// エラー処理(例えば例外をthrow)
}
if (orderUserID() != cancelUserID) {
// エラー処理(例えば例外をthrow)
}
// 実際のキャンセル処理
}
}
まあ大抵はロールによる権限管理とかのケースが多いだろうから、その場合はOrder自身は権限チェックできない
580デフォルトの名無しさん
2017/07/18(火) 16:22:38.33ID:j0qpHmEl581デフォルトの名無しさん
2017/07/18(火) 16:32:17.28ID:j0qpHmEl >>576-579
考え方としては筋が良いけど
もっと突き詰めていくと
キャンセル可能かどうかの判断は
キャンセルオブジェクト自身の責務にしたい
つまり
>if (!isCancelable()) {
はキャンセルオブジェクトの内部にあって
Orderクラスからは知らなくていいようにする
Orderクラスからcancelメソッドを呼ぶと
キャンセルクラスの内部で判定するように
考え方としては筋が良いけど
もっと突き詰めていくと
キャンセル可能かどうかの判断は
キャンセルオブジェクト自身の責務にしたい
つまり
>if (!isCancelable()) {
はキャンセルオブジェクトの内部にあって
Orderクラスからは知らなくていいようにする
Orderクラスからcancelメソッドを呼ぶと
キャンセルクラスの内部で判定するように
582デフォルトの名無しさん
2017/07/18(火) 16:35:29.31ID:ECiix6T1 >>581
コード書いて
コード書いて
583デフォルトの名無しさん
2017/07/18(火) 17:17:22.85ID:j0qpHmEl >>582
class Order {
Canceler canceler;
void cancel() {
canceler.cancel();
}
}
class Canceler {
boolean isCancelable() {
}
void cancel() {
if (!isCancelable()) {
}
}
}
class Order {
Canceler canceler;
void cancel() {
canceler.cancel();
}
}
class Canceler {
boolean isCancelable() {
}
void cancel() {
if (!isCancelable()) {
}
}
}
584デフォルトの名無しさん
2017/07/18(火) 17:22:40.25ID:ECiix6T1 >>583
悪いけど、そのコードのデメリットだけ思いついて、メリットを思いつかない
悪いけど、そのコードのデメリットだけ思いついて、メリットを思いつかない
585デフォルトの名無しさん
2017/07/18(火) 17:48:59.32ID:bC2KM4MS order classがデータなのか処理なのかまったく分からない。
586デフォルトの名無しさん
2017/07/18(火) 17:55:25.76ID:egYflce+ >>584
君のレベルが低い
君のレベルが低い
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】日本産牛肉の対中国輸出再開協議が中止 [おっさん友の会★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★2 [BFU★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★3 [BFU★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★4 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★3 [ぐれ★]
- 【悲報】自民党「聞いてないよー」 [616817505]
- 【実況】博衣こよりのえちえち雑談🧪★2
- 高市早苗って戦後最悪の総理大臣なのでは🤔? [929293504]
- 【高市速報】トヨタ社長、MAGA帽子をかぶって登場し世界を震撼させる [462275543]
- 竹田天皇「ホタテ輸入禁止されても中国以外誰も困らない。中国以外に売ればいいんだから」高市 [931948549]
- 【実況】博衣こよりのえちえち雑談🧪
