CodeKata One - Supermarket Pricing

スーパーマーケットの商品の価格を決める,とてもシンプルな問題。

最も単純な価格付けは,
Case1 この商品は0.65$です。


一方で、厄介な場合もある。
Case2 3個まとめて買えば,1$です。(4個,5個買ったら?)
Case3 1poundで$1.99です。(4ounce買ったら?)
Case4 2個買ったら,3個目はただです。(3個目は0$?)


・1pound=16ounce=456g 


【問題】
コーディングは必要ない。
Case1からCase4に対応できる,お金と価格を表現するモデルを考案すること。
また,モデルは汎用的であること。
つまり,レジでも在庫管理でも受注時でも使える。
それには次のPointに注意してほしい。


Point1 0.01$未満のお金は存在するのか?
Point2 端数は,いつ丸めるのか?
Point3 どのようにして価格決定のaudit trialを保障するか?
Point4 サービス代金と商品価格では状況は異なるか?
Point5 棚にある100個の商品がCase4方式だった時,在庫としてどれだけ価値がある?


・audit trial
監査証跡 かんさしょうせき
情報処理のプロセスが追跡できるようにした記録。
ログファイル等がこれにあたる。
はてなダイアリーキーワード,より)


【目的】
自由なスタイルでモデル化することを練習してほしい。
たくさんの方法を考え付くこと。
それぞれのモデルについて,良いところと悪いところを考えること。
・どんな技術で実現できるのか?
・記録するのには?
・そのモデルが良いと,どうやったら証明できるか?


【Ans1】
・販売価格は,定価×割引率として決める。
・割引率は,タイプとパラメータによって定まる割引方式(Case2タイプ,Case4タイプ等)に購入数を与えて求める。
  タイプCase2やCase4のものなど。
  パラメータは,まとめ買い割引の単位個数や,その時の価格など。
・商品が売れると,商品名と日時をKeyとして,販売価格を記録する。
・同時に在庫管理にアクセスし,在庫情報を更新する。
・在庫価値は,仕入れ価格×個数で決める。
・よって利益は,(販売価格 - 仕入れ価格)の和になる。
シーケンス図へのLink