我喜欢不可变的“模式”,因为它的优点,在过去,我发现设计具有不可变数据类型(某些,大多数甚至全部)的系统是有益的。通常,这样做的时候,我发现自己编写的bug更少,调试起来也容易得多。
但是,我的同龄人通常会避开一成不变。它们一点也不缺乏经验(远非如此),但是它们以经典的方式编写数据对象-私有成员,每个成员都有一个getter和setter。然后通常他们的构造函数不带参数,或者为了方便起见可以带一些参数。很多时候,创建对象是这样的:
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
也许他们到处都这样做。也许他们甚至都没有定义使用这两个字符串的构造函数,无论它们多么重要。也许他们以后不再更改这些字符串的值,并且永远不需要更改。显然,如果这些事情是对的,那么将对象更好地设计为不可变的,对吗?(构造函数具有两个属性,根本没有二传手)。
您如何确定对象类型是否应设计为不可变的?有很好的判断标准吗?
我目前正在讨论是否将自己项目中的某些数据类型切换为不可变,但我必须将其证明给同龄人,并且这些类型中的数据可能会(很少)更改-那时您当然可以更改这是一成不变的方法(创建一个新方法,从旧对象复制属性,但要更改的属性除外)。但是我不确定这仅仅是我对不可变事物的热爱,还是对它们的真正需求。