有一个强大的argument来使对象成为可变的。那么,在可能的情况下,我们是否应该始终保持不变性,或者在决定某些事物是否应该是不可变的时,先关注现实世界?
示例:纸牌游戏。 “卡片组”是不可改变的吗?我们有两个选择:
让甲板不变是很好的。我们将获得上述链接中描述的好处。但在现实世界中,一个套牌并不是一成不变的 - 我们随机播放并获得“同一套牌”,但顺序不同。
答案 0 :(得分:2)
您应始终努力为您的方案做出最佳权衡。对于某种风格来说,没有任何意义,只是因为它很流行,或者是很酷的孩子或者正在做的事情。如果您已经听过支持和反对的论据,那么您应该能够权衡这两个选项并做出适合您,您的代码库和您的团队的决策。
警惕盲目遵循最佳做法。
就这个具有卡片组的特定情况而言,默认情况下我会倾向于不可变,但在我继续之前要问自己几个问题:
我担心这是一个狡猾的答案,但你总是要根据自己的情况来判断。有时设计匹配域比使对象不可变更重要。其他时候不是,并且在进行编程选择时值得忘记域名 - 请记住,您的域名很少需要关心或模拟我们程序员日常处理的很多事情。在其他具有其他限制的情况下,您可能只需要放弃它们!
答案 1 :(得分:0)
不变性允许对象被视为一个值并被视为一个值。卡片是不可变形性的良好候选者,因为它不需要在之后进行修改。
请参阅此文章以帮助确定何时何地使用可变/不可变类IBM - Java theory and practice: To mutate or not to mutate?。