注文モデルの拡張

注文モデルを見ていて、ドメインモデルとERを並べると何か面白いことが気付くかもとふと思った。
ということで、昨日のモデルを拡張してみた。

拡張シナリオは、商品の価格を履歴(将来含む)対応するのと、消費税計算の税率のデータ化と顧客ごとにポリシー(四捨五入、切捨て)を指定できるようにした。

まずはドメインモデルから見てみると、商品_単価、消費税率、消費税計算サービスの3つのクラスが追加されている。

商品_単価クラスは商品クラスの内部データで単価履歴を管理する。商品クラス経由からしかアクセスされない。消費税率は消費税率を決める決定表すなわちルールデータをあらわしている。消費税計算サービスは様々な仕様条件(ポリシー)から消費税計算クラスを生成するクラスである。少し回りくどいように感じるが、ビジネスルールの実行と、実行するビジネスルールを決定する責務が分かれていることは多々ある。今回の例では注文クラスが実行するビジネスルールを決定し、商品IN注文が実行していることになる。

これにたいしてER図であるが、ドメインモデルで永続化するクラスをそのままテーブルに対応させてみた。

商品_単価と消費税はValueオブジェクトなのでPKをつけていない。もちろんPKをつけても構わないが、グローバルな識別子で直接アクセスされることはないので、PKというよりはアクセスパスを解析して検索キーをつけると考えたほうが合理的である。

で、比べてみると、うううん、あんまり気付きはないな。企画倒れかな。