私は失敗した

今開発してる案件で、商品の価格が割引される要件と割増される要件があって、それらを同一の仕組み(surcharge 値がプラスなら割増、マイナスなら割引)で作っちゃったんだけど、これは本当に失敗した。

割引はとってポジティブな要素なので積極的にアピール(定価と割引後価格を表示して強調)したいのに対して、割増はネガティブなので割増前価格は見せたくないというのがある。

割引は、複数要素を指定でき、その中で価格が最も安くなるものが採用される(割引クーポンを2つ持っていたら、割引額が高いクーポンのみが使用される、的な)。

このとき、割増条件にも該当したら、割増された価格に対して割引を適用するという処理が必要になる。

割引(群)だけだったら、各割引について割引後価格を算出してその中で最も安くなる価格を正とすればよいだけだったが、割増が絡むと、

  1. 割増が設定されていたら、それを定価に適用する
  2. 割引(群)の中で価格が最も安くなるものを 1 に適用する

という二段階の処理が必要になり、同一の概念にした意味がまったく無かった。

割増は定価に適用される概念、割引は売値に関わる概念、というように分けて考えるべきだったと反省。

要件をよく考えずにプログラム設計に落とすと失敗するよ、という好例だった。