我在一些域对象模型中看到,为所有域Entity对象创建了一个抽象基类(实现了Equals和GetHashCode)以从中获取其身份.
我不清楚为什么需要这个基类以及何时以及为什么应该使用它.您能否就此提供一些见解或向我推荐一个有关此问题的链接
谢谢
现在我理解了覆盖Equality的优势(这个链接有助于http://en.csharp-online.net/CSharp_Canonical_Forms -Identity_Equality)
回到域驱动设计我想稍微扩展我的问题;
我有一个客户实体,我使用guid作为身份.
如果我创建具有完全相同细节的2个客户实例,因为我使用guid作为标识它们将是两个不同的对象.但是因为它们具有相同的所有属性,所以它们应该是同一个对象(或者它是一种更好的ddd实践,以保持它们的独特性和独立性?)
试图了解我是否应该通过完全属性值匹配来处理两个对象的相等性.如果我朝着那个方向前进,那么我正在寻找在子类级别上覆盖基类的等式并实现这些条件,或者让实体的标识为字符串或哈希码(?)表示所有值的值这些属性并使用基类的Equality.
我可能在这里很少,所以提前感谢耐心.
小智 3
术语“相等”的使用在这里被过度使用:
\n\n1)身份平等
\n\n如果您有同一客户的 2 个实例,则它们应该具有相同的 GUID 值 xe2x80x93,这是确保您使用同一实体的唯一方法。实际上,同一实体总会有不同的实例(例如,在不同机器上运行的多用户应用程序)。
\n\n2) 相同而平等
\n\n您可以在此处检查 2 个实例是否具有相同的值。例如,如果两名员工正在查看同一个客户,并且第一个人修改并保存它,那么两个人都会看到不同的数据。他们\xe2\x80\x99都对同一个客户感兴趣,但数据变得陈旧。
\n\n对于(2),你肯定需要一种机制来进行检查。您可以比较每个属性(昂贵),或者可以使用 \xe2\x80\x98version\xe2\x80\x99 属性来检测更改(请参阅NHibernate\xe2\x80\x99s 乐观锁定机制)。
\n\n我认为你的例子有点做作,可能会让你远离 DDD 更重要的方面。如果您\xe2\x80\x99感兴趣,我出售一个可以帮助您更轻松地掌握 DDD 概念的工具。
\n