1 つの標準的なアプローチは、金額が保持され、操作されるたびに金額と通貨の両方を格納することです。
Martin Fowler の Patterns of Enterprise Application Architecture のMoney パターンを参照してください。
Fowler は、通貨操作を実行するためのオーバーロードされた算術演算子を使用して、2 つのプリミティブ コンポーネントを保持する単純なデータ型の定義について説明しています。
「基本的な考え方は、金額と通貨のフィールドを持つ Money クラスを用意することです。金額は、整数型または固定小数型のいずれかで格納できます。一部の操作では小数型の方が簡単ですが、他の操作では整数型の方が簡単です。浮動小数点型は、Money が回避しようとしている種類の丸めの問題を引き起こすため、絶対に避ける必要があります. ほとんどの場合、ドルのセントなど、通貨の値を完全な最小単位に丸める必要があります. ただし、 , 分数単位が必要な場合があります. 両方の種類を使用するアプリケーションでは特に, どのような種類のお金を扱っているかを明確にすることが重要です.算術の下では異なります。
数値を使用するのと同じくらい簡単にお金のオブジェクトを使用できるように、お金には算術演算が必要です。しかし、お金の算術演算は、数値のお金の演算とはいくつかの重要な違いがあります。最も明白なことは、足し算や引き算は通貨に対応している必要があるため、異なる通貨のお金を足し合わせようとした場合に対応できるようにすることです。最も単純で最も一般的な対応は、異なる通貨を足し合わせることをエラーとして扱うことです。より洗練された状況では、ウォード・カニンガムのお金の袋のアイデアを使用できます。これは、複数の通貨の通貨を 1 つのオブジェクトにまとめるオブジェクトです。このオブジェクトは、お金のオブジェクトと同じように計算に参加できます。また、通貨に換算することもできます。」