我不明白为什么 DDD 中的值对象应该是不可变的,我也看不出这是如何轻松完成的。(我专注于 C# 和实体框架,如果这很重要的话。)
例如,让我们考虑经典的 Address 值对象。如果您需要将“123 Main St”更改为“123 Main Street ”,为什么我需要构造一个全新的对象而不是说 myCustomer.Address.AddressLine1 = “123 Main Street”?(即使实体框架支持结构,这仍然是个问题,不是吗?)
我理解(我认为)值对象没有身份并且是域对象的一部分的想法,但是有人可以解释为什么不变性是一件好事吗?
编辑:我在这里的最后一个问题真的应该是“有人可以解释为什么应用于值对象的不变性是一件好事吗?” 对困惑感到抱歉!
编辑:为了澄清,我不是在询问 CLR 值类型(与引用类型相比)。我在问值对象的更高级别的 DDD 概念。
例如,这是一种为实体框架实现不可变值类型的 hack 方式: http ://rogeralsing.com/2009/05/21/entity-framework-4-immutable-value-objects 。基本上,他只是将所有二传手设为私有。为什么要这样做呢?