可变性对性能和便利性很有用,但它也会产生bug的风险,因为它要求使用对象的代码在全局级别上表现良好,这极大地复杂化了我们为确信其正确性而必须进行的推理和测试。关键的设计原则是不可变性:尽可能多地使用不可变对象。安全,避免bug。不可变对象不容易受到混叠引起的bug的影响。
为了软件的安全,我们常常要考虑软件在应用中,可能遭受冲击。例如,用户端用户的更改、黑客的恶意修改数据...
所以,我们在对于程序中的数据调用时,常常会使用不变量、防御性拷贝的方法。
并且,用户端不能直接获得的数据,也要进行同样的操作,复杂的程序之间通常有很强的关联,避免外力干扰影响数据的安全。
例如,在网易的一款游戏《光遇》中,我们要想知道人物的身高,要通过与游戏中建筑的对比,得出近似的身高等级。
我们并不能直接的得出人物的身高。
我们从中只能从中看出大概身高在一号左右,很难确定具体身高。
但是,网络上,有很多人售卖身高检测(次数)或者身高检测(永久使用权),通过人物的原ID,就能得到具体的身高、身材参数。
通过游戏界面无法得到的,被保护的数据,可以通过其他工具获得,如果没有数据的不变性、防御性拷贝,那么游戏的稳定将无法维护。
由此可见,在软件设计时,不变量、反孤星拷贝的设计是十分的重要的,程序员都应该重视。