gpt4 book ai didi

c# - DDD 值对象相等,== 与 .Equals()

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:31 26 4
gpt4 key购买 nike

所以我有一个值object,(随便说money),我想为它实现相等。我知道 ==.Equals()(引用和数据相等)的预期/默认行为。

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

在这种情况下,我应该

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

是否有我应该遵循的最佳实践/模式?谢谢

编辑:我收到了一些关于汇率变化的回复。所以为了清楚起见而更新。让我们说高度,而不是货币

  • 我想澄清一些假设:
  • //忽略:值对象包含小数金额,字符串/类货币
  • //忽略:汇率不变。
  • //忽略:类货币知道它与其他货币之间的汇率
  • 值对象包含十进制数量、字符串/类单位
  • 类单元知道它与另一个单元的转换
  • 我不打算扩大费率/转化率等

我更关心实践和模式,而不是实现货币。基本上,对人的高度采用相同的方法,其中高度是一个值对象,({1,m} 到 {3,ft},其中 1m 始终“等于”/“等于”3ft)

最佳答案

我不会将 1.0 美元视为 等于 0.63 英镑。为了检查货币值(value)是否相等,您需要的信息不仅仅是这两个值——您还需要当前汇率等。这尤其正确,因为相同的两个值不会始终相等,如果两个值永远相等,则相等应始终为真。

因此,AreEquivalentMonitaryValues() 之类的方法似乎是合适的 - 特别是考虑到需要额外的信息。

关于c# - DDD 值对象相等,== 与 .Equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com