2008-05-15-01-【Scrooge】クラス 設計 - 5 - project-enigma

2008-05-15-01-【Scrooge】クラス 設計 - 5

>> Site top >> weblog >> 月別アーカイブ >> 2008年05月のlog >> 2008-05-15-01-【Scrooge】クラス 設計 - 5

最終更新日付:2014/01/02 00:00:00


【Scrooge】クラス 設計 - 5

2008 年 05 月 15 日

今回は、画面右上のポップアップリストから要素を選択した時の動作から PriceListクラスのインタフェイスを考えてみよう。

PriceList というのは、前回書いた PriceTable とは別のクラスだ。PriceTable は POL::CGrid 派生の画面コントロールクラスだが、PriceList はデータベースを抽象化するもので、KeyList クラスやその派生クラスに近い。4月の末に書いた以下の図における priceDB をクラスとして表現したものである。

で、画面右上のポップアップリストの選択状態を変更した場合に何が起きるだろうか。ここでは、仮に商品ビューを表示している状況だったとしよう。すると、テーブルに表示されているのは shopDB の一覧で、変更直前のポップアップリストの選択内容に従 ってShopDB の各レコードから priceDB のレコードへの参照が張られていたはずだ。参照先の priceDB のレコードは店舗ID が参照元 ShopDB レコードの UniqueID で、なおかつ商品 ID が選択中の ItemDB のレコードの UniqueID であるようなレコードである。

ポップアップリストの選択状態が変化することによって、ShopDB から priceDB への参照が変化する。データベースのレコードを走査するコストをできるだけ小さくして情報の更新を行ないたい。すると、PriceList クラスに主導させるのが最善という結論になる。つまり、priceList の全レコードを反復し、ポップアップリストで選択された要素の UniqueID を持つレコード全てに対して対応するテーブル側のリストのレコードの参照を更新するのだ。日本語で書くと自分でもよくわからないが、それは陰郎の説明が悪いせいだろう。

ひとまず、PriceList クラスのこの部分だけを示す。名前は適当に決めた UpdateMap メソッド。

class PriceList {
public:
    void UpdateMap( KeyList* pKeyList, UInt32 selectionID );
};

ちなみに、上記のインタフェイスだけでは、与えられた selectionID を店舗ID と商品 ID のどちらに突合させれば良いのかわからない。ここから先は、明日以降。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.