前スレ
オブジェクト指向システムの設計 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+O576デフォルトの名無しさん
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自身は権限チェックできない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- 今日はチートデイなのでパスタサラダ食べました
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 5時だから窓から5回ちんこ出した
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- リュウジ、ファミマコラボが不評だったから反論で緊急の動画回しててワロタァ
