ですから、私には価値object
があり(任意にお金と言います)、それに対して平等を実装したいと思います。==
and .Equals()
(参照とデータの同等性)の意図された/デフォルトの動作を認識しています。
ただし、この場合、2つのオブジェクトを比較できるようにしたいので、計算では同等です(たとえば、1mと3 ftは同等です)が、永続性(同等性に依存すると思わNHibernate
れる場合は、を使用)、ユーザーの表示、および選択については同等です。isDirty
通貨の、私はそれらが異なると見なされることを望みます。
この場合、私はすべきですか、
==
との動作が異なります.Equals()
(そしてどちらが何をする必要がありますか)、- 同等性を確認したい場合は、各プロパティを確認するだけです(追加のコードを意味します)
- 次のようなメソッドを実装し
.IsEquivalent()
ます(後者は実行したくない) - 私が見逃している他の何か
従うべきベストプラクティス/パターンはありますか?ありがとう
編集:為替レートの変更に関していくつかの回答がありました。わかりやすくするために更新します。通貨ではなく高さを言うことができます
- いくつかの仮定を明確にしたいと思います。
- //無視:値オブジェクトには小数、文字列/クラス通貨が含まれます
- //無視:為替レートは変更されません。
- //無視:クラス通貨は、他の通貨との間の交換レートを認識しています
- 値オブジェクトには、10進数の数量、文字列/クラス単位が含まれます
- クラスユニットは、他のユニットとの間の変換を認識しています。
- レート/コンバージョンなどを拡大するつもりはありません
通貨を実装するのではなく、慣行やパターンに関心があります。基本的に、身長が値オブジェクトである人の身長への同じアプローチ({1、m}から{3、ft}、1mは常に3ftと「等しい」/「同等」)