领域驱动设计 – DDD:实体和价值对象之间的差异有什么用?
发布时间:2020-12-13 20:41:53 所属栏目:百科 来源:网络整理
导读:实体和值对象都是域对象.了解DDD中两者之间的区别有什么用?例如,将域对象视为实体或值对象是否会促成更清晰的域模型? 是的,能够分辨出差异是非常有帮助的,特别是在您设计和实施类型时. 其中一个主要区别在于处理相等性,因为实体应该具有与值对象完全不同的
实体和值对象都是域对象.了解DDD中两者之间的区别有什么用?例如,将域对象视为实体或值对象是否会促成更清晰的域模型?
是的,能够分辨出差异是非常有帮助的,特别是在您设计和实施类型时.
其中一个主要区别在于处理相等性,因为实体应该具有与值对象完全不同的行为.知道对象是实体还是值对象,可以告诉您应该如何实现类型的相等性.这本身很有用,但并不止于此. 实体是可变类型(至少通过概念).实体背后的整个想法是它表示具有已知生命周期进展的域概念(即,它被创建,它经历了几次转换,它被存档并且可能最终被删除).即使经过数月或数年,它也代表着同样特殊的“事物”,并且它会在整个过程中改变状态. 另一方面,值对象只表示没有任何固有身份的值.虽然您不必这样做,但它们非常适合作为不可变类型实现.这非常有趣,因为根据定义任何不可变类型都是线程安全的.当我们进入多核时代时,知道何时将对象实现为不可变类型是非常有价值的. 当等式语义众所周知时,它在单元测试中也有很大帮助.在这两种情况下,平等都是明确的.我不知道你使用的语言是什么,但在许多语言(C#,Java,VB.NET)中,默认情况下通过引用来确定相等性,这在很多情况下并不是特别有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Dependency Injection 依赖注入(官方原文翻译)
- ruby-on-rails – PostgreSQL – group by子句或用于聚合函
- postgresql在windows7环境下的热备hot standby
- c# – 如何从网格视图更新事件中的gridview编辑事件中获取保
- 依赖倒置原则详解--七大面向对象设计原则(3)
- uboot启动文件分析(hi3515)
- C#排序算法的比较分析
- Linq to XML---网站地图和RSS Feed
- ruby-on-rails – Rails:在Observer中使用URL Helper
- ruby-on-rails – Rspec和capybara选择的值