この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.2.2 顧客情報の編集
●ビジネスロジックの構築
データベースオブジェクトであるDataObj.Customerコンポーネントに顧客の情報を取得したり変更したりするメソッドを加えたところで,今度はプレゼンテーション層から直接呼び出されるビジネスロジックであるBusiness.Customerコンポーネントに,顧客の情報を取得したり変更したりするメソッドを加えてゆく。 ○顧客の情報を取得するメソッド
まずは,顧客の情報を取得するメソッドから実装することにする。このメソッドには,DataObj.Customerコンポーネントを実体化し,GetRecordメソッド(List 6-16)を呼び出して顧客情報を得て返すという仕組みを提供すればよい。ここでは,そのような顧客情報を取得するメソッドの名前をGetCustomerとし,List 6-24に示すように実装するものとする。
List 6-24の基本的な動作はDataObj.CustomerオブジェクトのGetRecordメソッドを呼び出すものだが,そのまえに31〜43行目においてIsDeletedメソッド(List 6-23)を呼び出して,取得する対象となるレコードが存在するのか削除されているのかそれとも存在しないのかを調べている。
これは,削除ずみ(DELETEDFLAGフィールドの値がTrue)の顧客情報を取得しようとした場合にエラーとしたいためである。しかし,営業部の管理者を示すSalesAdminロールとすべての管理者を示すAllAdminロールに属しているユーザーには,削除ずみであるフィールドも見せたい。そこで,39行目においてIsCallerInRoleメソッドを使い,SalesAdminロールもしくはAllAdminロールに属しているユーザーから呼び出された場合には削除ずみのレコードでも返すようにするが,そうでない場合には,「指定された顧客番号をもつ顧客は見つかりません」というエラーを返すように実装した。
○顧客の情報を更新するメソッド次に顧客の情報を更新するメソッドを実装する。すでにDataObj.Customerコンポーネントのところで示したように,本サンプルでは締め日の設定は別のメソッドとして分けた。Business.Customerコンポーネントにも,締め日以外の設定をするメソッドと締め日の設定をするメソッドの2つに分ける。ここでは,前者をUpdateCustomerメソッド,後者をUpdateCustomer_BILLDAYメソッドという名前とする。このとき,それぞれのプログラムはList 6-25やList 6-26のようになる。
List 6-25やList 6-26を見るとわかるように,それぞれDataObj.Customerコンポーネントを実体化し,UpdateRecordメソッド(List 6-21)ならびにUpdateRecord_BILLDAYメソッド(List 6-22)を呼び出しているだけである。なお,List 6-25やList 6-26に示したUpdateCustomerメソッド,UpdateCustomer_BILLDAYメソッドでは,List 6-24に示したGetCustomerメソッドとは異なり,ロールの判定はせず,いかなるロールのユーザーがメソッドを呼び出したとしても,削除ずみの顧客の更新は許さないようにした(List 6-25の27行目,List 6-26の21行目)。なぜなら,削除された顧客情報を更新したいときには,削除されている状態のままで変更させるよりも,いったん顧客を復活させてから変更させたほうが実用上望ましいと筆者が判断したためである(顧客情報の削除ならびに復活については,次に説明する「6.2.3 顧客情報の削除」で述べる)。もし,SalesAdminロールやAllAdminロールに属するユーザーは削除ずみの顧客であっても情報を更新できるようにしたければ,List 6-25の26〜30行目,List 6-26の20〜24行目をList 6-24の31〜43行目に示したような形態に変更すればよい。
| Chapter 6 23/92 |
