gpt4 book ai didi

c# - 为什么在 DDD 中实现 IEquatable 的值对象?

转载 作者:行者123 更新时间:2023-11-30 20:17:35 28 4
gpt4 key购买 nike

我是 DDD 的新手,我正在从事一个他们实现 DDD 概念的项目。

我知道在 DDD 中我们有实体值对象,而且我知道在值对象的情况下,如果我们需要确保它们的相等性,我们应该比较属性'每个值对象的值。

我们使用 C# 作为编程语言,我想知道为什么我们需要覆盖 GetHashCode()Equals() 方法?

我的意思是为什么我们不只比较属性的值来比较值对象?

最佳答案

部分原因是您希望以易于使用的方式设计您的类。

比如写/纬度就容易多了

coordinate1.Equals(coordinate2)

如果你这样写的话

cooridate1.Latitude == coordinate2.Latitude && cooridnate2.Longitude == cooridnate2.Longitude

此外,在更复杂的情况下,也很容易出错。例如,如果你写

price.Amount == price2.Amount

现在您忘了包括货币。对于某些值对象,您可能会遇到不明显的等式

public override bool Equals(Currency c) {
//2 Kind of currency, dollars and cents.
var amount = this.Amount;
if (this.Currency != "Cents") amount = amount * 100;
var amount2 = c.Amount;
if (c.Currency != "Cents") amount2 = amount2 * 100;

return amount == amount2;
}

GetHashcode 被 HashSet 和其他需要 Equatable 对象的算法使用。

每日提示:还为您的值对象提供 == 和 != 方法。默认情况下,它们将检查引用相等性,而这不是您在值对象的情况下所关心的。这只是您不希望发生的错误来源之一。

关于c# - 为什么在 DDD 中实现 IEquatable 的值对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461225/

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