我知道不变性并不总是圣杯。但是,由于我现在学习 Scala 已经有一段时间了,所以我总是首先尝试找到一个不可变的解决方案,尤其是在涉及纯“数据对象”时。我目前正在寻找一种为给定场景创建不可变对象图的方法,但我不确定这是否可能。
我只想创建一次图形,创建后不需要更改。
想象以下场景:
- 只有一种类型:
Person
. Person
对象可以有两种类型的引用:Person
Person 和潜在的孩子(也是类型)之间存在单向的 1-n 关系。- 此外,妻子有丈夫,反之亦然
第一个问题是两个配偶之间的关系是循环的。因为设置引用会产生新对象(由于不变性),所以最终配偶 A 指向配偶 B_old,而配偶 B 指向配偶 A_old。另一个帖子中有人说循环引用和不变性是矛盾的。我认为这并不总是正确的,因为配偶 A 可以在自己的构造函数中创建配偶 B 并通过this
- 但即使使用这种不舒服的方法,之后添加子引用也会再次更改 A 和 B。反过来——从孩子开始,然后联系配偶——会导致类似的情况。
目前,我认为没有办法做到这一点。但也许我错了,有一些我不知道的模式或解决方法。如果不是,可变性是唯一的解决方案吗?