通貨の値としての使用

2003 年 8 月 26 日

バリューオブジェクト の一般的な例は数多くあります。私の好みは通貨であり、通貨と密接に関連しているものの一つです。

多くのシステムで通貨は値としてうまく機能します。必要な重要な要素は、国際的に認識されている通貨コード(米ドルの場合 USD など)です。

ただし、私は通貨が少し興味深くなったシステムに関わったことがあります。私の記憶が正しければ、彼らが通貨に求めていたものの1つは、「ピップ値」でした。彼らの UI には、通貨の価値を上下に動かすためのナッジボタンがありました。各通貨には独自のピップ値があり、このピップ値は変更される可能性がありました。頻繁に変更されることはありませんでしたが、それでも変更されていました。これは、値オブジェクトの非常に役立つルールを破ります。つまり、値オブジェクトは不変であるということです。

私たちが行った解決策は、2つの通貨クラスを作成することでした。1つは値オブジェクトで、通貨コードと他のいくつかの不変な要素を保持していました。2つ目は参照オブジェクトです(CurrencyValue と CurrencyReference のような名前を付けたと思います)。通常は値オブジェクトが受け渡されますが、値オブジェクトのメソッドの中には、ピップ値など、参照オブジェクトに委譲するものもあります。参照オブジェクトは、通貨コードでインデックス付けされたルックアップテーブルに保持されます(これが唯一の方法ではありません)。

このような双方向のセマンティック動作は珍しく、私が見たのはこのときだけです。確かに、ほとんどのシステムは通貨に対して単純な値オブジェクトで済ませることができます。