这个问题的最佳设计模式是什么?

时间:2011-09-21 07:47:20

标签: properties inotifypropertychanged

我有一个有几个属性的类。某些属性可以由其他类更改,但某些属性依赖于其他属性。例如,假设我的类有三个属性:A,B和C.A和B可以被系统中的其他类更改,C等于A + B.类生成属性更改通知所以当A或B更改时我想要,为更改的属性(A或B)生成通知,并为C生成通知。 我有三个选择(任何其他?)

1-创建一个普通的C属性(带有支持字段)并在A和B的setter中添加代码以更改C.

2-创建一个普通的C属性并听取我班级内班级的属性变更通知,并在A或B改变时更改C.

3-为C no setter创建一个计算属性但是getter是A + B,在A(和B)的setter中,我对A(或B)和C都进行了火灾属性更改。

哪一个是更好的设计模式(在C#中)?我个人喜欢设计2号。

4 个答案:

答案 0 :(得分:1)

听起来像Observer模式在这里可能很有用。请参阅示例http://www.oodesign.com/observer-pattern.html。虽然搜索Observer模式会产生许多结果和其他示例,但有些更简单,并且特定于语言。

答案 1 :(得分:0)

我可能会选择2和3的变体。

您可以为C设置一个计算属性(仅限getter),以便C = A + B计算仅在一个位置。

然后,根据您的选项2,您可以在同一个类中侦听属性更改事件...但是当您检测到A和B的PropertyChanged事件时,不需要更新C,而只需要引发PropertyChanged事件C当时。

答案 2 :(得分:0)

这里的问题是你试图将事情的方式与微软强迫你做事的方式混合......:)

但除了我的咆哮之外,它认为选项3听起来最干净。当然不是1,这是迄今为止最糟糕的,我认为订阅你自己的属性更改事件可能会导致一些时髦的问题,当一些可怜的sap试图在将来维护代码时很难调试... < / p>

如果你从高层次考虑它,你在3中的建议完美地描述了课堂上发生的事情:

任何时候,如果属性A被更改,应该通知类的观察者,属性C也已经改变(因为它有)。

答案 3 :(得分:0)

2是最纯粹的,因为它将A,B和C分开,但它确实涉及一些开销,而在属性通知中进行字符串解析。

如果它是一组简单的属性我会被1诱惑,因为它们仍然合理分离,但更新更简单。 3是最差的IMO,因为A + B正在复制代码,无论如何都应该是单独的(C通知)。