7
不变的类在什么时候成为负担?
在设计用于保存数据模型的类时,我已经读过它对创建不可变对象很有用,但是到什么时候构造函数参数列表和深层副本的负担变得太大,您必须放弃不可变限制? 例如,这是一个不可变的类,用于表示命名的事物(我使用C#语法,但该原理适用于所有OO语言) class NamedThing { private string _name; public NamedThing(string name) { _name = name; } public NamedThing(NamedThing other) { this._name = other._name; } public string Name { get { return _name; } } } 可以构造,查询和复制已命名的事物到新的已命名事物,但是名称不能更改。 这一切都很好,但是当我想添加另一个属性时会发生什么呢?我必须向构造函数添加一个参数并更新副本构造函数;据我所知,这不是太多的工作,但是当我想使一个复杂的对象不可变时,问题就开始了。 如果该类包含可能包含其他复杂类的属性和集合,在我看来,构造函数参数列表将成为一场噩梦。 那么,什么时候一个类变得太复杂而无法改变呢?