所以我有一个值object
,(随意说钱),我想为它实现平等。我知道==
和.Equals()
(引用和数据相等)的预期/默认行为。
不过,在这种情况下,我希望能够比较两个对象,并说它们对于计算是等效的(例如 1m 和 3 ft 是等效的)但是对于持久性(使用NHibernate
,isDirty
我认为取决于相等性)、用户显示和选择货币,我希望它们被认为是不同的。
在这种情况下,我是否应该
==
和.Equals()
(应该做什么)有不同的行为,- 无论我想在哪里检查等效性,只需检查每个属性(意味着额外的代码)
- 实现类似的方法
.IsEquivalent()
(我不想做后者) - 我想念的其他东西
是否有我应该遵循的最佳实践/模式?谢谢
编辑:我收到了一些关于改变汇率的回应。为了清楚起见,所以更新。让我们说身高,而不是货币
- 我想澄清一些假设:
- //忽略:值对象包含十进制金额,字符串/类货币
- // 忽略:汇率不变。
- // 忽略:类货币知道它与其他货币的汇率
- 值对象包含十进制数量,字符串/类单位
- 班级单位知道它与另一个单位的转换
- 我不打算扩大费率/转换等
我更关心实践和模式,而不是实施货币。基本上,对人的身高采用相同的方法,其中身高是一个值对象,({1,m} 到 {3,ft},其中 1m 始终“等于”/“等价于”到 3ft)