DDD值对象相等,== vs .Equals()

Daw*_*zem 1 c# nhibernate domain-driven-design equality value-objects

所以我有一个价值object,(任意说钱),我想为它实现平等.我知道==.Equals()(参考和数据相等)的预期/默认行为.

在这种情况下,我希望能够比较两个对象,并说它们相当于计算(例如1m和3ft是等效的)但是对于持久性(使用NHibernate,isDirty我认为取决于相等),用户显示和选择货币,我希望它们被认为是不同的.

在这种情况下,我应该

  1. 有不同的行为==.Equals()(以及应该做什么),
  2. 无论我想在哪里检查等效性,只需检查每个属性(意味着额外的代码)
  3. 实现一种方法.IsEquivalent()(我不想做后者)
  4. 我缺少的其他东西

我应该遵循最佳实践/模式吗?谢谢

编辑:我得到了一些关于改变汇率的回应.所以要更新清晰度.让我们说高度,而不是货币

  • 我想澄清一些假设:
  • // ignore:值对象包含十进制数量,字符串/类货币
  • // ignore:汇率不会改变.
  • // ignore:类货币知道它与另一个货币的汇率
  • value对象包含十进制数,字符串/类单元
  • 类单位知道它与另一个的转换
  • 我不打算扩大费率/转换率等

与实施货币相比,我更关注实践和模式.基本上,相同的方法是一个人的身高,其中身高是一个价值对象,({1,m}到{3,ft},其中1m总是"等于"/"相当于"3ft)

Ree*_*sey 5

我不认为1.0美元等于 0.63英镑.为了检查单一价值的相等性,你需要的信息不仅仅是两个值 - 你还需要当前的汇率等等.尤其如此,因为相同的两个值不一致,如果两个值相等,则等式应始终为真.

因此,一种方法,例如AreEquivalentMonitaryValues(),似乎是合适的 - 特别是考虑到需要额外的信息.