この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.3.3 製品情報の削除
●データオブジェクトの実装
では次に,DataObj.Productコンポーネントに対し,指定された製品のレコードを削除するメソッドを加える。ここでは,顧客情報の削除で実装したのと同様に,(1)製品情報テーブルにおいて対象となる製品を示すレコードのDELETEDFLAGフィールドの値をTrueまたはFalseに設定するメソッド,(2)製品情報テーブルにおいて対象となる製品を示すレコードそのものを削除するメソッド,という2つを実装することにする。前者のメソッドをSetDeletedFlagメソッド,後者のメソッドをDeleteRecordメソッドという名前で実装したときのプログラムはList 6-63,List 6-64のようになる。
List 6-63とList 6-64のプログラムは,すでに顧客情報の削除で実装したDataObj.Customerコンポーネントに装備させたSetDeletedFlagメソッド(List 6-31)とDeleteRecordメソッド(List 6-32)とほぼ同じである。異なるのは,対象となるテーブルが製品情報テーブルなのか,それとも顧客情報テーブルなのかの違いにほかならない。
●ビジネスロジックの実装以上でデータベース操作に必要なコンポーネントならびにメソッドを実装したことになるので,次にそれらを組み合わせて製品情報を削除するビジネスロジックのほうを実装してゆく。
製品情報を削除するには,次の処理をしなければならない。
- 削除対象となる製品が別のテーブルから参照されていないことを確認する
- DELETEDFLAGフィールドの値をTrueに設定する
1.の処理を実行するには,DataObj.StockコンポーネントとDataObj.SlipDetailコンポーネントにそれぞれ実装したIsExistsProductメソッド(List 6-61とList 6-62)を使えばよい。そして,2.の処理を実行するには,DataObj.Productコンポーネントに実装したSetDeletedFlagメソッド(List 6-63)を使えばよい。
ただし,顧客情報を削除する処理と同様,このサンプルでは,(1)1回目の削除においてはDELETEDFLAGフィールドの値をTrueにして「削除ずみ」というマークを付ける,(2)DELETEDFLAGフィールドの値がTrueである製品を削除しようとしたときにはその製品を示すレコードそのものを削除する,という削除方法をとる。ただし,(2)の処理はProductsAdminロールまたはAllAdminロールに属するユーザーしかできないものとする。こうすることによって,削除ずみのレコードがテーブル中に多く溜まってしまうという状況を避けることができる。(2)の処理をするためには,DataObj.Productコンポーネントに実装したDeleteRecord(List 6-64)メソッドを使えばよい。
実際に上記の処理をするメソッドをDeleteProductという名前で実装すると,List 6-65のようになる。
また,削除した製品を復活させるメソッドも併せて実装しておこう。このメソッドをUndeleteProductという名前で実装すると,List 6-66のようになる。
List 6-66のUndeleteProductメソッドでは,DELETEDFLAGフィールドの値をFalseに設定し直すことによって,製品を復活させている。UndeleteProductメソッドの処理内では,ロールを見てセキュリティの権限を設定していない。実際にはProductsAdminロールまたはAllAdminロールに属するユーザーにしか復活許可を与えるべきではないが,その設定はプログラム側ではなく[コンポーネントサービス]管理ツールで設定することにする。
| Chapter 6 40/92 |
