この特集のトップページへ
Chapter 6:ビジネスロジックの設計



6.2.3 顧客情報の削除
●顧客を削除するデータオブジェクト
 次にDataObj.Customerコンポーネントに,指定された顧客番号を持つ顧客を削除するメソッドを追加する。削除するといっても,実際にレコードを削除するわけではなく,DELETEDFLAGフィールドの値をTrueにするだけである。そのようなプログラムは,List 6-31のようになる。

 List 6-31に示したSetDeletedFlagメソッドでは,DELETEDFLAGフィールドの値をTrueに設定するのではなく,第2引数でTrueにするのかFalseにするのかを選択できるようにした。第2引数にTrueを指定した場合には,DELETEDFLAGフィールドの値をTrueに設定する。これは,指定した顧客を削除するという処理である。これに対して,第2引数にFalseを指定した場合には,DELETEDFLAGフィールドの値をFalseに設定する。これは,いったん削除した顧客を復活させるという処理である。

 もちろん,削除するまえには,指定された顧客を参照している伝票ならびに請求書が存在しないことを確認しなければならない。しかし,List 6-31では,その処理はしていない。これについては,すぐあとで説明するビジネスロジックのほうに実装する。ビジネスロジックとデータオブジェクトの2層で構成する場合,データオブジェクトにはデータ操作そのものの処理を実装し,条件判断など高度な部分はビジネスロジックのほうで処理するのが一般的なので,ここではそれに倣うことにする。

 ところで,実際のレコードを削除するのではなく,DELETEDFLAGフィールドをフラグとして利用して,削除ずみであるか否かを判断するという仕組みは,履歴を残したり誤操作を防いだりという意味では便利である。しかし,顧客を頻繁に削除するようだと,削除ずみの顧客情報がどんどん溜まってしまうことになるだろう。それを防ぐため,DELETEDFLAGフィールドを利用するのではなく,本当にレコードを削除してしまいたいケースもある。そのような状況に備え,List 6-32に示すDeleteRecordメソッドも実装しておくことにする。

 List 6-32に示したDeleteRecordメソッドはSQLのDELETE文を発行してレコードを削除する(28行目)だけなので説明は割愛する。

prevpg.gif Chapter 6 26/92 nextpg.gif