ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 所有域实体对象的抽象基类

2019-05-22 14:05:11  阅读:192  来源: 互联网

标签:c domain-driven-design


我在一些域对象模型中看到,为所有域Entity对象创建了一个抽象基类(实现了Equals和GetHashCode)以从中获取其身份.

我不清楚为什么需要这个基类以及何时以及为什么应该使用它.您能否就此提供一些见解或向我推荐一个有关此问题的链接

谢谢

现在我理解了覆盖Equality的优势(这个链接有助于http://en.csharp-online.net/CSharp_Canonical_Forms-Identity_Equality)

回到域驱动设计我想稍微扩展我的问题;

我有一个客户实体,我使用guid作为身份.

如果我创建具有完全相同细节的2个客户实例,因为我使用guid作为标识它们将是两个不同的对象.但是因为它们具有相同的所有属性,所以它们应该是同一个对象(或者它是一种更好的ddd实践,以保持它们的独特性和独立性?)

试图了解我是否应该通过完全属性值匹配来处理两个对象的相等性.如果我朝着那个方向前进,那么我正在寻找在子类级别上覆盖基类的等式并实现这些条件,或者让实体的标识为字符串或哈希码(?)表示所有值的值这些属性并使用基类的Equality.

我可能在这里很少,所以提前感谢耐心.

解决方法:

这里使用术语相等的重载:

1)身份的平等

如果您有2个同一客户的实例,则它们都应具有相同的GUID值 – 这是确保您使用同一实体的唯一方法.实际上,将始终存在相同实体的不同实例(例如,在不同机器上运行的多用户应用程序).

2)同一性的平等

这是您检查2个实例具有所有相同值的位置.例如,如果2名工作人员正在查看同一客户,并且第一人修改了&保存它,人们都会看到不同的数据.他们都对同一个客户感兴趣,但数据变得陈旧.

对于(2),您肯定需要一种机制来进行检查.您可以比较每个属性(昂贵),或者您可以使用’version’属性来检测更改(请参阅NHibernate’s optimistic locking mechanism).

我认为你的例子有点做作,可能会让你远离DDD更重要的方面.如果您有兴趣,I sell a tool可以帮助您更轻松地掌握DDD概念.

标签:c,domain-driven-design
来源: https://codeday.me/bug/20190522/1152041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有