5

複数のタイムゾーンでユーザーを適切に処理する方法を読んだ後、すべての日付を正規化されたアプリケーション全体のタイムゾーンに保存し、正規化UTCされたタイムゾーンと個々のユーザーの差分を適用する方法を学びました。出力時のタイムゾーン。今日、私はこれがソフトウェアで通貨を処理するためにこのアプローチを適用するのに適切であるかどうかを考えるようになりました:

保存されているすべての通貨は、アプリケーション全体の通貨に変換されます。たとえば、EUR(€)とすると、出力時に、その通貨はユーザー自身の通貨に変換され、その日の為替レートが更新されますか?

ここでの常識は何ですか?これは一般的にどのように解決され、これを処理する方法を選択する前に何を知っておく必要がありますか?

4

2 に答える 2

4

1 つの標準的なアプローチは、金額が保持され、操作されるたびに金額と通貨の両方を格納することです。

Martin Fowler の Patterns of Enterprise Application Architecture のMoney パターンを参照してください。

Fowler は、通貨操作を実行するためのオーバーロードされた算術演算子を使用して、2 つのプリミティブ コンポーネントを保持する単純なデータ型の定義について説明しています。

「基本的な考え方は、金額と通貨のフィールドを持つ Money クラスを用意することです。金額は、整数型または固定小数型のいずれかで格納できます。一部の操作では小数型の方が簡単ですが、他の操作では整数型の方が簡単です。浮動小数点型は、Money が回避しようとしている種類の丸めの問題を引き起こすため、絶対に避ける必要があります. ほとんどの場合、ドルのセントなど、通貨の値を完全な最小単位に丸める必要があります. ただし、 , 分数単位が必要な場合があります. 両方の種類を使用するアプリケーションでは特に, どのような種類のお金を扱っているかを明確にすることが重要です.算術の下では異なります。

数値を使用するのと同じくらい簡単にお金のオブジェクトを使用できるように、お金には算術演算が必要です。しかし、お金の算術演算は、数値のお金の演算とはいくつかの重要な違いがあります。最も明白なことは、足し算や引き算は通貨に対応している必要があるため、異なる通貨のお金を足し合わせようとした場合に対応できるようにすることです。最も単純で最も一般的な対応は、異なる通貨を足し合わせることをエラーとして扱うことです。より洗練された状況では、ウォード・カニンガムのお金の袋のアイデアを使用できます。これは、複数の通貨の通貨を 1 つのオブジェクトにまとめるオブジェクトです。このオブジェクトは、お金のオブジェクトと同じように計算に参加できます。また、通貨に換算することもできます。」

于 2011-09-27T19:47:45.063 に答える
1

処理時間と通貨の違いは、タイム ゾーンの値が変化しないことです。

金銭的価値を扱うときは、実際のお金の通貨が何であるかを考慮する必要があります。実際の金額が USD であり、それを EUR として保存する場合、実際の値と保存された値の値がずれると、両者の間に不一致が生じます。

または、為替レートが更新されたときにすべての値を再計算する必要がありますが、それでは値を単一の通貨に格納するという目的が失われます。

于 2011-09-27T19:44:35.443 に答える