|
|
1
6
制造
另外,代替
编辑
编辑2
|
|
|
2
3
您可以让Thing实现接口iReadOnlyThing,它只对每个Thing的属性具有ReadOnly访问权限。
你可以用同样的方法实现一个只读容器类
和
去吧。ReadOnlyObservableCollection的构造函数以ObservableCollection为参数,允许对集合进行读取访问,而不允许进行写入访问。它的优点是不允许readonlyobservatablecollection被转换回observatedcollection。 我觉得我应该指出,WPF开发中使用的Model-View-ViewModel模式实际上是按照您建议的原则工作的,即拥有一个NotifyPropertyChanged事件,该事件包含一个标识更改的属性的字符串。。。 MVVM模式的编码开销很大,但有些人似乎喜欢它。。。 |
|
|
3
2
根据你的陈述,你在
您可以考虑以下解决方案:
不管你做什么,你都不会回避以下非常基本的设计问题:要么你允许更改X,然后你必须在允许更改X的每个部分中引入验证/业务逻辑;要么你将X设为只读,并相应地调整应用程序中可能要更改X的部分(例如,删除旧对象,添加新对象一。 |
|
|
4
1
对于简单的对象,可以使它们不可变。但不要做过头。如果使复杂对象不可变,则可能需要创建一些生成器类以使使用它成为可接受的。这通常是不值得的。 而且不应该使具有不可变标识的对象。如果希望对象的行为类似于值类型,通常会使其不可变。 在我的一个项目中,我通过只给基类提供getter并在派生类中隐藏setter来攻击不变性。然后为了使对象不可变,我将其转换为基类。当然,这种类型的不变性不是由运行时强制的,如果出于其他目的需要类层次结构,那么它就不起作用。 |
|
|
5
1
让Changing event in Thing;Pack订阅这个事件怎么样?当您更改X in Thing时,Pack在事件处理程序中执行必要的检查,如果更改不合适,则抛出异常? |
|
6
0
不幸的是,没有什么东西能比
唯一接近它们的是不变性(就像你自己和Itay提到的),但是它没有像
如果在某些情况下需要可变,则只能在运行时执行以下操作
但是它污染了你的代码
|
|
|
7
0
如果从集合中移除要修改的内容,而不只是允许直接访问,则在放回时将对其进行检查。 当然,缺点是你必须记住把它放回背包里! 或者在包上提供方法来修改内容,这样您就可以检查设置的值是否违反域规则。 |