この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.3.5 在庫の処理
●入庫予定の更新
さて,続いて追加した入庫予定を変更したり削除したりする処理を実装する。この処理も,CancelDueメソッドと同様に在庫数を狂わせるおそれがあるため,あまり実装したくないところではある。だが,単なる入力ミスはもちろん,諸般の事情で予定の入庫数よりも少ない数量しか入庫されないといったことも,往々にしてあるだろう。
そこで,追加した入庫予定のレコードを更新したり削除したりするメソッドを実装してゆく。
○入庫予定の編集まずは,入庫の編集処理から説明する。すでにList 6-75では,DataObj.Stockコンポーネントに対して,指定した入庫予定のレコード情報を返すGetRecordメソッドを実装した。このメソッドを呼び出して入庫予定の情報を取得するメソッドをビジネスロジックに実装すれば,プレゼンテーション層から特定の入庫予定レコードの情報を取得することができる。そのようなメソッドをBusiness.ProductコンポーネントにGetStorageメソッドとして実装したものが,List 6-79である。
次に,指定した入庫予定情報を更新するためのメソッドをデータオブジェクトに実装する。このようなメソッドを実際にUpdateRecordという名前でDataObj.Stockコンポーネントに実装したものが,List 6-80である。
List 6-80のUpdateRecordメソッドを使い,入庫予定を書き換えるメソッドをBusiness.ProductコンポーネントのUpdateStorageメソッドとして実装したものが,List 6-81である。
List 6-81のUpdateStorageメソッドでは,事前にIsDueメソッド(List 6-73)を呼び出し,更新しようとしている入庫予定が施行ずみでないことを確認し,施行ずみのものは更新できないようにしている(24〜26行目)。なぜなら,施行ずみの入庫予定のレコードを変更,特に数量を変更する場合には,対象となる製品の在庫数(製品情報テーブルのSTOCKフィールドの値)も書き換えないと,「入庫数の総和−出庫数の総和=残りの在庫数」という関係が崩れてしまうためである。もし,施行ずみの入庫予定のレコードも更新したいのであれば,24〜26行目の条件判定を削除したうえでSTOCKフィールドの値を更新するようにプログラムを書き換えればよい。だが,先に実装したCancelDueメソッド(List 6-78)を事前に呼び出して施行まえの状態に戻せば解決することなので,そういった処理は実装しないことにした(なぜなら,CancelDueメソッドの処理内でSTOCKフィールドの値を減少させているからである)。
また,List 6-81では29行目でDataObj.StockコンポーネントのInStockメソッドを呼び出している。このメソッドはList 6-82に示すようにDataObj.Stockコンポーネントに実装するものとする。
InStockメソッドは,指定されたレコードIDを持つレコードが入庫を示すものなのか出庫を示すものなのかを調べるものである。入庫なのか出庫なのかを調べるには,SLIPIDフィールドの値がNullであるかどうかを判定する。わざわざInStockメソッドを使わなくても,List 6-75に示したGetRecordメソッドで全フィールドの値を取得し,SLIPIDフィールドの値を調査してもよい。しかし,GetRecordメソッドだと,SLIPIDフィールド以外にも多数のデータが流れることになり,パフォーマンスの劣化の原因となることと,呼び出し側はすべてのフィールド値を受け取る変数を用意しておかなければならないという手間がかかることを考慮し,あえて入庫なのか出庫なのかだけを調べるInStockメソッドを実装し,それを利用することにした。
| Chapter 6 46/92 |
